Spring Boot属性配置
1. Spring Boot的默认配置文件application.properties或者appliaction.yml
2. 自定义属性有多种方法:
2.1对于引用少数几个属性值,可以直接使用@Value注解直接引用自定义属性值,不需要@Configuration等注解配合.
application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:
com.windy.name="windy" com.windy.want="祝大家新年好"
然后直接在要使用的地方通过注解@Value(value=”${config.name}”)就可以绑定到你想要的属性上面
@RestController public class UserController { @Value("${com.windy.name}") private String name; @Value("${com.windy.want}") private String want; @RequestMapping("/") public String hexo(){ return name+","+want; } }
2.2 有时候属性太多,一个个绑定太累,官方提倡绑定一个对象的Bean.
实现这种方式需要3个步骤:
这里我们新建一个Java类ConfigBean,并在这个类上加上注解@Configuration(下图少了这个注解)
@Configuration @ConfigurationProperties(prefix = "com.windy") //@PropertySource(classpath:application.properties) public class ConfigBean { private String name; private String want; // 省略getter和setter }
还需要在spring Boot入口类加上@EnableConfigurationProperties
@SpringBootApplication @EnableConfigurationProperties() public class Chapter2Application { public static void main(String[] args) { SpringApplication.run(Chapter2Application.class, args); } }
最后在Controller中引入ConfigBean使用即可
@RestController public class UserController { @Autowired ConfigBean configBean; @RequestMapping("/") public String hexo(){ return configBean.getName()+configBean.getWant(); } }
3. 配置文件的优先级
application.properties和application.yml文件可以放在以下四个位置:
- 外置,在相对于应用程序运行目录的/congfig子目录里。
- 外置,在应用程序运行的目录里
- 内置,在config包内
- 内置,在Classpath根目录
同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,如图:
此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.properties里的属性里面的属性就会覆盖application.yml。
4. 使用@Profile注解进行配置
首先定义一个DBConnect的接口
@Component public interface DBConnector { public void configure(); }
然后分别定义Mysql和Oracle的实现类
@Component @Profile("Mysql") public class MysqlConnector implements DBConnector { @Override public void configure() { System.out.println("This is Mysql!"); } }
@Component @Profile("Oracle") public class OracleConnector implements DBConnector { @Override public void configure() { System.out.println("This is Oracle!"); } }
在配置文件application.properties中指定使用哪个实现类
spring.profiles.active=Oracle
然后就可以这么用了
@RestController public class DBContorller { @Autowired DBConnector dbConnector; @RequestMapping("/db") public void dbConnector(){ dbConnector.configure(); //最终打印"This is Oracle!" } }
除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile
spring.profiles.active: Oracle spring.profiles.include: proddb,prodmq