pom.xml加入依赖:
1
2
3
4
5
6
7
|
<!-- 支持 @ConfigurationProperties 注解 -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-configuration-processor</ artifactId >
< version >${spring-boot.version}</ version >
</ dependency >
|
在application.yml文件中加上:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#自定义的属性和值
myYml:
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
|
使用一个java类获取yml文件的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package com.sun.configuration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 加载yaml配置文件的方法
* Created by sun on 2017-1-15.
* spring-boot更新到1.5.2版本后locations属性无法使用
* @PropertySource注解只可以加载proprties文件,无法加载yaml文件
* 故现在把数据放到application.yml文件中,spring-boot启动时会加载
*/
@Component
//@ConfigurationProperties(locations = {"classpath:config/myProps.yml"},prefix = "myProps")
@ConfigurationProperties (prefix = "myYml" )
public class YmlConfig {
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;
}
//String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要
public void setSimpleProp(String simpleProp) {
this .simpleProp = simpleProp;
}
public String[] getArrayProps() {
return arrayProps;
}
public void setArrayProps(String[] arrayProps) {
this .arrayProps = arrayProps;
}
public List<Map<String, String>> getListProp1() {
return listProp1;
}
public void setListProp1(List<Map<String, String>> listProp1) {
this .listProp1 = listProp1;
}
public List<String> getListProp2() {
return listProp2;
}
public void setListProp2(List<String> listProp2) {
this .listProp2 = listProp2;
}
public Map<String, String> getMapProps() {
return mapProps;
}
public void setMapProps(Map<String, String> mapProps) {
this .mapProps = mapProps;
}
}
|
通过依赖注入就可以获取该对象:
1
2
|
@Autowired
private YmlConfig config;
|
方法内获取值:
1
2
3
4
5
6
7
|
ObjectMapper objectMapper = new ObjectMapper();
//测试加载yml文件
System.out.println( "simpleProp: " + config.getSimpleProp());
System.out.println( "arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
System.out.println( "listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
System.out.println( "listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
System.out.println( "mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));
|
(二)properties配置文件:
使用@PropertySource注解加载配置文件,该注解无法加载yml配置文件。使用@Value注解获得文件中的参数值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package com.sun.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
/**
* 加载properties配置文件,在方法中可以获取
* abc.properties文件不存在,验证ignoreResourceNotFound属性
* 加上encoding = "utf-8"属性防止中文乱码,不能为大写的"UTF-8"
* Created by sun on 2017-3-30.
*/
@Configuration
@PropertySource (value = { "classpath:/config/propConfigs.properties" , "classpath:/config/abc.properties" },
ignoreResourceNotFound = true ,encoding = "utf-8" )
public class PropConfig {
// PropertySourcesPlaceholderConfigurer这个bean,
// 这个bean主要用于解决@value中使用的${…}占位符。
// 假如你不使用${…}占位符的话,可以不使用这个bean。
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
//获取properties文件参数值有两种方法,一种获得Environment 的对象,第二种就是@Value注解
@Autowired
private Environment env;
@Value ( "${age}" )
String name;
@RequestMapping ( "/" )
@ResponseBody
String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {
logger.info( "测试通过!!!" );
ObjectMapper objectMapper = new ObjectMapper();
//测试加载yml文件
System.out.println( "simpleProp: " + config.getSimpleProp());
System.out.println( "arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
System.out.println( "listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
System.out.println( "listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
System.out.println( "mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));
//测试加载properties文件
System.out.println(env.getProperty( "name" )); //孙凯
System.out.println(env.getProperty( "abc" )); //null
System.out.println(name); //26
return "Hello World!" ;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。