SpringBoot的properties和yml两种配置方式, 配置注入参数, 以及配置文件读取失效的问题

SpringBoot支持两种配置方式,一种是properties文件,一种是yml

首先在pom文件中添加依赖:

<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-configuration-processorartifactId><optional>trueoptional>
dependency>

1. yml配置文件绑定属性

使用properties可能会有中文乱码的问题,而使用yml可以避免这种情况
,yml的结构与json相似:
注意: yml冒号后要有空格,如果不加空格, 会导致yml配置读取失效
这里写图片描述
没有空格, 颜色都没有变色,显然有问题.

list用-,使用markdown的都应该熟悉,map是跟json一样key: value

user:username: "小红"password: "${user.username}123"# 100以内的随机数age: ${random.int(100)}array : 1,2,3,4,5,6,7strlist: - list1
     - list2
     - list3
   maplist: - name: abc
       value: abcValue- name: 123
       value: 123Valuemap: key1: value1key2: value2server:# 端口号port: 8081

对应的User类:
@ConfigurationProperties这个注解,会将yml配置文件中属性名一样的值注入到User类对应的字段中, 相当于给每个字段加上@Value

@Component
//@ConfigurationProperties设置前缀user
@ConfigurationProperties(prefix = "user")
public class User {private int userid;private String username;private String password;private int age;private String[] array ;private List> maplist = new ArrayList>();private List strlist = new ArrayList<>();private Map map = new HashMap<>();.....

比如password,对应的配置是user.password,所以设置一个前缀user

Controller层

@RestController
@RequestMapping("/boot")
public class MyController {@Autowiredprivate User user;@RequestMapping("/hello")public String hello() {return "这是第一个springboot";}@RequestMapping("/user")public User getUser() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//测试加载yml文件System.out.println("username: " + user.getUsername());System.out.println("username: " + user.getPassword());System.out.println("age: " + user.getAge());System.out.println("array: " + objectMapper.writeValueAsString(user.getArray()));System.out.println("maplist: " + objectMapper.writeValueAsString(user.getMaplist()));System.out.println("strlist: " + objectMapper.writeValueAsString(user.getStrlist()));System.out.println("map: " + objectMapper.writeValueAsString(user.getMap()));return user;}}

页面显示结果和控制台结果
这里写图片描述
这里写图片描述

2. properties配置方式

*.properties文件中的中文默认以ISO-8859-1方式编码,因此需要对中文内容进行重新编码

public String getTitle3() {try {return new String(title3.getBytes("ISO-8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return title3;}

2.1 @ConfigurationProperties方式

application.properties

com.zyd.type3=Springboot - @ConfigurationProperties
com.zyd.title3=使用@ConfigurationProperties获取配置文件
#map
com.zyd.login[username]=zhangdeshuai
com.zyd.login[password]=zhenshuai
com.zyd.login[callback]=http://www.flyat.cc
#list
com.zyd.urls[0]=http://ztool.cc
com.zyd.urls[1]=http://ztool.cc/format/js
com.zyd.urls[2]=http://ztool.cc/str2image
com.zyd.urls[3]=http://ztool.cc/json2Entity
com.zyd.urls[4]=http://ztool.cc/ua

在需要赋值的类上打上注解@ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "com.zyd")
// PropertySource默认取application.properties
// @PropertySource(value = "config.properties")
public class PropertiesConfig {public String type3;public String title3;public Map login = new HashMap();public List urls = new ArrayList<>();// 转换编码格式public String getTitle3() {try {return new String(title3.getBytes("ISO-8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return title3;}....getter setter

main Application类:

@SpringBootApplication
@RestController
public class Applaction {@Autowiredprivate PropertiesConfig propertiesConfig;/*** * 第一种方式:使用`@ConfigurationProperties`注解将配置文件属性注入到配置对象类中* * @author zyd* @throws UnsupportedEncodingException* @since JDK 1.7*/@RequestMapping("/config")public Map configurationProperties() {Map map = new HashMap();map.put("type", propertiesConfig.getType3());map.put("title", propertiesConfig.getTitle3());map.put("login", propertiesConfig.getLogin());map.put("urls", propertiesConfig.getUrls());return map;}public static void main(String[] args) throws Exception {SpringApplication application = new SpringApplication(Applaction.class);application.run(args);}
}

运行结果:


{"title":"使用@ConfigurationProperties获取配置文件",
"urls":["http://ztool.cc","http://ztool.cc/format/js","http://ztool.cc/str2image","http://ztool.cc/json2Entity","http://ztool.cc/ua"],"login":{"username":"zhangdeshuai","callback":"http://www.flyat.cc","password":"zhenshuai"},"type":"Springboot - @ConfigurationProperties"}
缩进量:    引号   显示控制  展开 叠起 2345678级 
格式化JSON:
{"title": "使用@ConfigurationProperties获取配置文件", "urls": ["http://ztool.cc", "http://ztool.cc/format/js", "http://ztool.cc/str2image", "http://ztool.cc/json2Entity", "http://ztool.cc/ua"], "login": {"username": "zhangdeshuai", "callback": "http://www.flyat.cc", "password": "zhenshuai"}, "type": "Springboot - @ConfigurationProperties"
}

2.2 @Value注解方式

在需要赋值的属性上,加上@value注解
main Application类:

@SpringBootApplication
@RestController
public class Applaction {@Value("${com.zyd.type}")private String type;@Value("${com.zyd.title}")private String title;/*** * 第二种方式:使用`@Value("${propertyName}")`注解* * @author zyd* @throws UnsupportedEncodingException* @since JDK 1.7*/@RequestMapping("/value")public Map value() throws UnsupportedEncodingException {Map map = new HashMap();map.put("type", type);// *.properties文件中的中文默认以ISO-8859-1方式编码,因此需要对中文内容进行重新编码map.put("title", new String(title.getBytes("ISO-8859-1"), "UTF-8"));return map;}public static void main(String[] args) throws Exception {SpringApplication application = new SpringApplication(Applaction.class);application.run(args);}
}

运行结果

{"title":"使用@Value获取配置文件","type":"Springboot - @Value"}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部