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配置文件的方法 的全部内容, 来源链接: utcz.com/z/319398.html

回到顶部