注: 由于测试代码较多, 影响查看效果, 所以只放了核心代码, 如需查看, 请点示例代码 https://gitee.com/lfalex/spring-boot-example/tree/dev/spring-boot-properties
默认访问的属性文件为 application.properties 文件, 可在启动项目参数中指定 spring.config.location 的参数:
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
参考官方文档: https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config-application-property-files
使用 @PropertySource 来获取配置文件的中属性值 (注意: 在使用该注解时, 属性文件必须为 properties 文件, yaml 文件不可用):
- @Configuration
- @PropertySource("classpath:/app.properties")
- public class AppConfig {
- @Autowired
- Environment env;
- @Bean
- public TestBean testBean() {
- TestBean testBean = new TestBean();
- testBean.setName(env.getProperty("testbean.name"));
- return testBean;
- }
- }
参考官方文档: https://docs.spring.io/spring/docs/5.0.6.RELEASE/javadoc-api/org/springframework/context/annotation/PropertySource.html
使用 @Value 注解直接将属性值注入进修饰对对象中:
- import org.springframework.stereotype.*;
- import org.springframework.beans.factory.annotation.*;
- @Component
- public class MyBean {
- @Value("${name}")
- private String name;
- // ...
- }
参考官方文档: https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config
使用 @ConfigurationProperties(prefix="my") 将属性值注入进对象, 可以注入对象的属性 key 的对象, 也可以注入进 List 或 Set 中, 但是属性的书写需要有规范:
- my.servers0=dev.example.com
- my.servers1=another.example.com
使用方式
- @ConfigurationProperties(prefix="my")
- public class Config {
- //set,list 不需要 Setter 方法
- private List<String> servers = new ArrayList<String>();
- public List<String> getServers() {
- return this.servers;
- }
- }
参考官方文档: https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config-loading-yaml
可以使用 yaml 文件格式来替换 properties, 属性获取方式不变 (注: yaml 文件后缀名为. yml)
使用 POJO 方式直接将属性注入进实体对象中:
- application.yml
- acme:
- remote-address: 192.168.1.1
- security:
- username: admin
- password: adminCSS
- roles:
- - USER
- - ADMIN
- AcmeProperties.java
- package com.example;
- import java.net.InetAddress;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- @ConfigurationProperties("acme")
- public class AcmeProperties {
- private InetAddress remoteAddress;
- private final Security security = new Security();
- public InetAddress getRemoteAddress() { ... }
- public void setRemoteAddress(InetAddress remoteAddress) { ... }
- public Security getSecurity() { ... }
- public static class Security {
- private String username;
- private String password;
- private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
- public String getUsername() { ... }
- public void setUsername(String username) { ... }
- public String getPassword() { ... }
- public void setPassword(String password) { ... }
- public List<String> getRoles() { ... }
- public void setRoles(List<String> roles) { ... }
- }
- }
参考文档: https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config-typesafe-configuration-properties
代码示例: https://gitee.com/lfalex/spring-boot-example/tree/dev/spring-boot-properties
来源: https://www.cnblogs.com/lfalex0831/p/9055664.html