为提高程序的可配置性,通常我们需要将一些可能随环境变化的变量放入到配置文件中。
Spring Boot 应用通常将配置项放入到 application.yaml 或 application.properties 文件中。本文演示读取存储在 application.yaml 文件中的参数。
假设 application.yaml 文件的内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| server: port: 7070
logging: level: root: ERROR cn: com: hohistar: DEBUG
my-app: backend: host: "xxx.us-west-1.compute" port: 8233
|
其中,”my-app” 部分是我们应用自定义的参数。
直接使用@Value注解读取
在需要使用到相关参数的类中,直接使用 @Value 注解进行读写,代码如下:
1 2 3 4 5 6 7 8 9 10
| public class AuthApi {
@Value("#123;my-app.backend.host}") private String backendHost;
@Value("#123;my-app.backend.port}") private Integer backendPort;
... }
|
添加配置参数类
如果在 yaml 配置的参数需要在应用的不同类中使用,每个类都加上以上的代码就非常麻烦,而且因为重复代码,还会降低应用的可维护性。所以这种情况我们通常定义一个类来专门读取参数。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| @Configuration @ConfigurationProperties() @Data public class MyAppConfig {
@Value("#123;my-app.backend.host}") private String backendHost;
@Value("#123;my-app.backend.port}") private Integer backendPort;
}
|
这里,我们使用了 Lombok 中的 @Data 注解来简化 get/set 方法,使用 @Configuration 来告诉 Spring 该类是一个配置类。
然后,我们就可以在要应用这些参数的类中引用该配置类,如:
1 2 3 4 5 6 7
| public class AuthApi {
@Autowired private MyAppConfig config;
... }
|