spring-boot如何读取props和yml配置文件

2023-06-14,,

这篇文章主要介绍spring-boot如何读取props和yml配置文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

最近微框架spring-boot很火,笔者也跟风学习了一下,废话不多说,现给出一个读取配置文件的例子。

首先,需要在pom文件中依赖以下jar包

<dependencies> 
 <dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-web</artifactId> 
 </dependency>  
 <dependency> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-test</artifactId> 
  <scope>test</scope> 
 </dependency> 
</dependencies>

其次,我们需要一个spring-boot启动类 

@SpringBootApplication 
@EnableConfigurationProperties({PropsConfig.class,YmlConfig.class}) 
public class ReadApplication { 
 public static void main(String[] args) { 
  SpringApplication.run(ReadApplication.class, args); 
 } 
}

没错,@EnableConfigurationProperties注解里指出的PropsConfig.class,YmlConfig.class分别就是读取props和yml配置文件的类。接下来,我们分别进行读取properties和yml配置文件的具体实现。

1.读取properties配置文件

在类路径下放置一个application.properties文件,大致内容如下:

master.ds.driverClassName=com.mysql.jdbc.Driver 
master.ds.url=jdbc:mysql://localhost:3306/test 
master.ds.username=root 
master.ds.password=root 
master.ds.filters=stat 
master.ds.maxActive=20 
master.ds.initialSize=1 
master.ds.maxWait=60000 
master.ds.minIdle=10 
master.ds.timeBetweenEvictionRunsMillis=60000 
master.ds.minEvictableIdleTimeMillis=300000 
master.ds.validationQuery=SELECT 'x' 
master.ds.testWhileIdle=true 
master.ds.testOnBorrow=false 
master.ds.testOnReturn=false 
master.ds.poolPreparedStatements=true 
master.ds.maxOpenPreparedStatements=100 
master.ds.removeAbandoned=true 
master.ds.removeAbandonedTimeout=1800 
master.ds.logAbandoned=true

读取props配置的类,很简单,基本就是一个pojo/vo类,在类上加载@ConfigurationProperties注解即可。

@ConfigurationProperties(prefix = "master.ds",locations = "classpath:application.properties") 
public class PropsConfig { 
 private String driverClassName; 
 private String url; 
 private String username; 
 private String password; 
 private String filters; 
 private String maxActive; 
 private String initialSize; 
 private String maxWait; 
 public String getDriverClassName() { 
  return driverClassName; 
 } 
 public void setDriverClassName(String driverClassName) { 
  this.driverClassName = driverClassName; 
 } 
 public String getUrl() { 
  return url; 
 } 
 public void setUrl(String url) { 
  this.url = url; 
 } 
 public String getUsername() { 
  return username; 
 } 
 public void setUsername(String username) { 
  this.username = username; 
 } 
 public String getPassword() { 
  return password; 
 } 
 public void setPassword(String password) { 
  this.password = password; 
 } 
 public String getFilters() { 
  return filters; 
 } 
 public void setFilters(String filters) { 
  this.filters = filters; 
 } 
 public String getMaxActive() { 
  return maxActive; 
 } 
 public void setMaxActive(String maxActive) { 
  this.maxActive = maxActive; 
 } 
 public String getInitialSize() { 
  return initialSize; 
 } 
 public void setInitialSize(String initialSize) { 
  this.initialSize = initialSize; 
 } 
 public String getMaxWait() { 
  return maxWait; 
 } 
 public void setMaxWait(String maxWait) { 
  this.maxWait = maxWait; 
 } 
}

单元测试类

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = ReadApplication.class) 
public class ReadApplicationPropsTests { 
 @Autowired 
 private PropsConfig propsConfig; 
 @Test 
 public void testDisplayPropsValue() { 
  String driverClassName = propsConfig.getDriverClassName(); 
  String url = propsConfig.getUrl(); 
  String username = propsConfig.getUsername(); 
  String password = propsConfig.getPassword();   
  String filters = propsConfig.getFilters(); 
  String maxActive = propsConfig.getMaxActive(); 
  String initialSize = propsConfig.getInitialSize(); 
  String maxWait = propsConfig.getMaxWait();     
  System.out.println("driverClassName -> " + driverClassName); 
  System.out.println("url -> " + url); 
  System.out.println("username -> " + username); 
  System.out.println("password -> " + password);   
  System.out.println("initialSize -> " + initialSize); 
  System.out.println("maxWait -> " + maxWait); 
   
 } 
}

可以看到在控制台输出的测试内容:

driverClassName -> com.mysql.jdbc.Driver 
url -> jdbc:mysql://localhost:3306/test 
username -> root 
password -> root 
initialSize -> 1 
maxWait -> 60000

2.读取yml配置文件

在类路径下放置一个application.yml文件,大致内容如下:

myProps: #自定义的属性和值 
 simpleProp: simplePropValue 
 arrayProps: 1,2,3,4,5 
 listProp1: 
 - name: abc 
  value: abcValue 
 - name: efg 
  value: efgValue 
 listProp2: 
 - config2Value1 
 - config2Vavlue2 
 mapProps: 
 key1: value1 
 key2: value2

读取yml配置文件的类。

@ConfigurationProperties(prefix="myProps") //application.yml中的myProps下的属性 
public class YmlConfig { 
 private String simpleProp; 
 private String[] arrayProps; 
 private List<Map<String, String>> listProp1 = new ArrayList<>(); //接收prop1里面的属性值 
 private List<String> listProp2 = new ArrayList<>(); //接收prop2里面的属性值 
 private Map<String, String> mapProps = new HashMap<>(); //接收prop1里面的属性值   
 public String getSimpleProp() { 
  return simpleProp; 
 } 
  
 public void setSimpleProp(String simpleProp) { 
  this.simpleProp = simpleProp; 
 } 
  
 public List<Map<String, String>> getListProp1() { 
  return listProp1; 
 } 
 public List<String> getListProp2() { 
  return listProp2; 
 } 
 
 public String[] getArrayProps() { 
  return arrayProps; 
 } 
 
 public void setArrayProps(String[] arrayProps) { 
  this.arrayProps = arrayProps; 
 } 
 
 public Map<String, String> getMapProps() { 
  return mapProps; 
 } 
 
 public void setMapProps(Map<String, String> mapProps) { 
  this.mapProps = mapProps; 
 } 
}

单元测试类

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = ReadApplication.class) 
public class ReadApplicationYmlTests { 
 @Autowired 
 private YmlConfig ymlConfig;  
 @Test 
 public void testDisplayYmlValue() throws JsonProcessingException { 
  System.out.println("simpleProp: " + ymlConfig.getSimpleProp());    
  ObjectMapper objectMapper = new ObjectMapper(); 
  System.out.println("arrayProps: " + objectMapper.writeValueAsString(ymlConfig.getArrayProps())); 
  System.out.println("listProp1: " + objectMapper.writeValueAsString(ymlConfig.getListProp1())); 
  System.out.println("listProp2: " + objectMapper.writeValueAsString(ymlConfig.getListProp2())); 
  System.out.println("mapProps: " + objectMapper.writeValueAsString(ymlConfig.getMapProps()));  
 } 
}

可以看到在控制台输出的测试内容:

simpleProp: simplePropValue 
arrayProps: ["1","2","3","4","5"] 
listProp1: [{"name":"abc","value":"abcValue"},{"name":"efg","value":"efgValue"}] 
listProp2: ["config2Value1","config2Vavlue2"] 
mapProps: {"key1":"value1","key2":"value2"}

是不是很神奇,不需要spring的applicationContext.xml文件也可以顺利运行之。

以上是“spring-boot如何读取props和yml配置文件”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注本站行业资讯频道!

《spring-boot如何读取props和yml配置文件.doc》

下载本文的Word格式文档,以方便收藏与打印。