Spring Boot的配置文件相较于自己整合Spring简单了很多,我们不需要配置太多的内容,就可以让Spring正常运行;但是在有些时候,我们还是需要修改一些配置,或者添加一些自己需要配置参数。
1. 自定义属性
当我们创建Spring Boot项目时,系统会在我们的src/main/resources
文件夹下创建一个application.properties
的配置文件;我们也可以将其修改为application.yml
,因为Spring Boot支持这种文件格式。
在application.yml自定义一组属性:
my:
name: 小明
age: 12
我们只需要在属性上添加@Value("${属性名}")
注解,就可以读取到这个配置:
@RestController
public class MyController {
@Value("${my.name}")
private String name;
@Value("${my.age}")
private int age;
@RequestMapping(value = "/my")
public String my(){
return name + ":" + age;
}
}
现在我们访问这个接口显示的信息:
小明:12
2. 将一组属性注入实体类
当我们有很多配置属性的时候,这时我们会把这些属性作为字段来创建一个javabean,并将属性值赋予给他们,比如:
my:
name: 小明
age: 12
number: ${random.int}
uuid: ${random.uuid}
max: ${random.int(10)}
value: ${random.value}
message: hi,I'm ${my.name}
其中配置文件中用到了${random} ;这个这个东西暂时不说;
然后我们创建一个java bean,用来接收这些属性:
@ConfigurationProperties(prefix = "my")
@Component
public class My {
private String name;
private Integer age;
private Integer number;
private String uuid;
private Integer max;
private String value;
private String message;
// 省略getter和setter方法
}
需要加个注解@ConfigurationProperties,并加上它的prrfix属性。另外需要添加@Component。另外spring-boot-configuration-processor依赖要添加,不添加会有警告,但是不影响使用。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
另外application类的EnableConfigurationProperties注解可以不加,原因不明,可能新版本的关系。
@RestController
@EnableConfigurationProperties({My.class})
public class MyController {
@Autowired
private My my;
@RequestMapping(value = "/my")
public My my(){
return my;
}
}
这样请接口,信息就会返回为json格式。
3. 自定义配置文件
这里我们据需创建一个新的配置文件。比如叫test.yml
:
com:
user:
name: 小明
age: 12
我们在创建一个实体类用于接收:
@PropertySource(value = "classpath:test.properties")
@ConfigurationProperties(prefix = "com.user")
@Component
public class User {
private String name;
private Integer age;
// 省略getter和setter方法
}
这里有几个问题至今原因不明:
- 网上找了很多,都是说类上应该添加
@Configuration
,而不是@Component
,但是我试了很多次,都是不对的 - 自定义的配置文件只能是
.properties
这个格式,不支持.yml
这里我们调用一下:
@RestController
@EnableConfigurationProperties({My.class, User.class})
public class MyController {
@Autowired
private My my;
@Autowired
private User user;
@RequestMapping(value = "/my")
public My my(){
return my;
}
@RequestMapping(value = "/user")
public User user(){
return user;
}
}
这样的访问接口,我们就能得到注入的信息了。
4. 多个环境配置文件
在现实的开发环境中,我们往往会有不同的环境配置;格式为application-{profile}.properties,其中{profile}对应你的环境标识,如下:
- application-test.properties:测试环境
- application-dev.properties:开发环境
- application-prod.properties:生产环境
这里怎么使用呢?我们只需要在application.yml中配置即可:
spring:
profiles:
active: dev
这样,我们当前使用的环境,就是application-dev.properties
中的配置;
我们也可以在启动的时候直接去修改所使用的环境:
java -jar xxx.jar spring.profiles.active=prod