Spring Boot提倡基于Java的配置。尽管你可以使用XML源调用SpringApplication.run(),不过还是建议你使用@Configuration类作为主要配置源。
你不需要将所有的@Configuration放进一个单独的类,@Import注解可以用来导入其他配置类。或者使用@ComponentScan注解。
可以使用 @ImportResource注解加载XML配置文件。
实现自动配置有两种可选方式,分别是将@EnableAutoConfiguration或@SpringBootApplication注解到@Configuration类上。通常只需加在main方法上。
如果发现启用了不想要的自动配置项,你可以使用@EnableAutoConfiguration注解的exclude属性禁用它们。如:
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@SpringBootApplication注解等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScanpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
除了使用application.properties作为配置文件名,如果想要指定其他外部配置文件,可以根据spring.config.name和spring.config.location决定加载哪个文件,但是它们必须定义为environment属性(通常为OS env,系统属性或命令行参数)。
如果使用环境变量而不是系统属性,需要注意多数操作系统的key名称不允许以句号分割(period-separated),但你可以使用下划线(underscores)代替(比如,使用SPRING_CONFIG_NAME代替spring.config.name)。
如果应用运行在容器中,那么JNDI属性(java:comp/env)或servlet上下文初始化参数可以用来代替环境变量或系统属性,当然也可以使用环境变量或系统属性。
@ConfigurationProperties 用于第三方组件的配置。其中使用此注解有宽松绑定。包括虚线分割(比如,context-path绑定到contextPath),将environment属性转为大写字母(比如,PORT绑定port)。形如:
@ConfigurationProperties(prefix="person")public class OwnerProperties { private String firstName; public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; }}
以下属性名都能使用
属性 | 说明 |
person.firstName | 标准驼峰规则 |
person.first-name | 虚线表示,推荐用于.properties和.yml文件中 |
person.first_name | 下划线表示,用于.properties和.yml文件的可选格式 |
PERSON_FIRST_NAME | 大写形式,使用系统环境变量时推荐 |
如果你为自己的组件定义了一系列的配置keys,我们建议你将它们以@ConfigurationProperties注解的POJO进行分组。由于@Value不支持relaxed绑定,所以如果你使用环境变量提供属性值的话,它就不是很好的选择。