简介
首先是理解以下配置,配置可以简单的理解成配置bean。平时写代码如果不考虑扩展性的话,很多的配置信息都写死在了代码里面(要修改就比较麻烦)。配置就可以狭义的理解成将一些属性,常量等放到一个配置文件里面去。
spring boot 的配置方式比较多,我们先讲讲常见的方式。比较常见的方式就是classpath下面的application.properties,spring boot 会加载这个配置文件。
对待配置也要有理智的认识,配置就是为了使用配置,而不是为了配置而配置
创建配置
- 在classPath下面创建一个 application.properties 文件
-
添加一些配置(配置是以键值对的形式添加)
使用配置(这个才是最重要的)
- 使用注解的形式 @Value(这里可以理解成 SPEL 表达式)
@SpringBootApplication
@RestController
public class App {
@Value("${name}")
private String name;
@Value("${number}")
private String number;
@Value("${user.firstname}")
private String firstName;
@RequestMapping("/")
public String showProperInfo(){
return firstName+name+" "+number;
}
public static void main(String[] args){
SpringApplication.run(App.class,args);
}
}
- 使用 Java 代码来取
@SpringBootApplication
@RestController
public class App {
@Autowired
Environment environment;
@RequestMapping("/")
public String showProperInfo(){
String firstName = environment.getProperty("user.firstname");
String name = environment.getProperty("name");
String number = environment.getProperty("number");
return firstName+name+" "+number;
}
public static void main(String[] args){
SpringApplication.run(App.class,args);
}
}
-
自动装配到Java类的属性,注解@ConfigurationProperties(spring boot的自动装配的bean基本都是使用这种方式实现)。可以理解成以一种模式来装配
-
修改一下配置信息
- 注解配置,ConfigurationProperties 配置一个前缀,配置文件里面的属性就可以和前缀映射起来(注意这里要配置的属性需要get 和 set 方法)
-
@SpringBootApplication
@RestController
@Configuration
@ConfigurationProperties(prefix = "my.setting")
public class App {
private String name;
private String number;
@RequestMapping("/")
public String showProperInfo(){
return name + " " + number;
}
public static void main(String[] args){
SpringApplication.run(App.class,args);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
Application.properties的其他功能
-
属性之间的引用,配置的属性可以引用其他配置属性(可以简单的理解成文本替换)
-
随机数支持
不同配置之间的切换
- 有时候有这样的需求,测试的时候是一个配置,开发的时候是一个配置
-
按照一定的规律建立多个配置文件,通过激活不同的配置文件来实现不同配置之间的切换
-
通过spring.profiles.active属性激活不同的配置,如果要激活application-dev.properties就使用spring.profiles.active=dev。如果要激活application-pro.properties就使用spring.profiles.active=pro。这个属性可以配置多个(spring.profiles.active=pro,dev)
条件化配置
- 使用场景是有一些bean在测试的时候需要注册,有些bean仅仅在生产环境注册
- spring 提供了@Profile注解来条件化配置,这个注解是和上面配置的spring.profiles.active属性一起使用的,比如如果@Profile("dev")对应的bean或者配置类就仅仅是在spring.profiles.active中有dev是被初始化
- 任何使用了@Component 和 @Configuration注解的类都可以使用Profile注解
@Configuration
@Profile("dev")
public class ProductionConfiguration {
}
End