SpringBoot支持两种配置方式,一种是properties
文件,一种是yml
首先在pom文件中添加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency>
使用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,7 strlist: - list1 - list2 - list3 maplist: - name: abc value: abcValue - name: 123 value: 123Value map: key1: value1 key2: 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<Map<String, String>> maplist = new ArrayList<Map<String, String>>(); private List<String> strlist = new ArrayList<>(); private Map<String, String> map = new HashMap<>();.....
比如password
,对应的配置是user.password
,所以设置一个前缀user
@RestController@RequestMapping("/boot")public class MyController { @Autowired private 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; }}
页面显示结果和控制台结果
*.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; }
application.properties
com.zyd.type3=Springboot - @ConfigurationPropertiescom.zyd.title3=使用@ConfigurationProperties获取配置文件#mapcom.zyd.login[username]=zhangdeshuaicom.zyd.login[password]=zhenshuaicom.zyd.login[callback]=http://www.flyat.cc#listcom.zyd.urls[0]=http://ztool.cccom.zyd.urls[1]=http://ztool.cc/format/jscom.zyd.urls[2]=http://ztool.cc/str2imagecom.zyd.urls[3]=http://ztool.cc/json2Entitycom.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<String, String> login = new HashMap<String, String>(); public List<String> 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@RestControllerpublic class Applaction { @Autowired private PropertiesConfig propertiesConfig; /** * * 第一种方式:使用`@ConfigurationProperties`注解将配置文件属性注入到配置对象类中 * * @author zyd * @throws UnsupportedEncodingException * @since JDK 1.7 */ @RequestMapping("/config") public Map<String, Object> configurationProperties() { Map<String, Object> map = new HashMap<String, Object>(); 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"}缩进量: 引号 显示控制 展开 叠起 2级 3级 4级 5级 6级 7级 8级 格式化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"}
在需要赋值的属性上,加上@value注解
main Application类:
@SpringBootApplication@RestControllerpublic 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<String, Object> value() throws UnsupportedEncodingException { Map<String, Object> map = new HashMap<String, Object>(); 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"}
联系客服