1. 在某些业务中,需要将类的配置写到配置文件中, 不在代码中写死配置。
2. 所以需要读取配置文件(yaml, properties) 读取到Java Bean中。
3. 本文以oss对象存储配置为demo。两种方式初始化配置文件。
-----------------
1. yml配置文件
server: port: 8888 spring: application: name: hello-world # oss对象存储配置 oss-constant: endpoint: secret access-key: key secret-key: key bucket: bucket
2. 绑定方式1
使用@Value注解, 注入配置文件的值。
好处:能够选择性的配置。能够类名.属性。
坏处:写死了@Value(value=“xxx”) 前缀,项目打包后了不方便修改。
package top.bitqian.hello.constant; import lombok.Data; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * 加载oss对象存储配置 * java项目www.fhadmin.org * @date 2021/3/20 09:30 */ @Data @Component public class OssLoadConstant implements InitializingBean { @Value("${oss-constant.endpoint}") private String endpoint; @Value("${oss-constant.access-key}") private String accessKeyId; @Value("${oss-constant.secret-key}") private String accessKeySecret; @Value("${oss-constant.bucket}") private String bucketName; public static String ENDPOINT; public static String ACCESS_KEY_ID; public static String ACCESS_KEY_SECRET; public static String BUCKET_NAME; @Override public void afterPropertiesSet() { // 初始化设置值 ENDPOINT = this.endpoint; ACCESS_KEY_ID = this.accessKeyId; ACCESS_KEY_SECRET = this.accessKeySecret; BUCKET_NAME = this.bucketName; } }
3. 绑定方式2
3.1 依赖.
<dependencies> <!-- 属性装配提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <!-- 打包时排除 属性装配提示插件 --> <configuration> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </configuration> </execution> </executions> </plugin> </plugins> </build>
3.2 boot 中提供的属性装配功能。
yaml中的前缀和下面的ConfigurationProperties的prefix对应。
yaml中的属性和实体类属性对应。(yaml中的横杠可以转驼峰)
package top.bitqian.hello.constant; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * 此Java类与配置文件绑定了. * java项目www.fhadmin.org * @date 2021/3/20 09:36 */ /* 1. 绑定方法1: @Component @ConfigurationProperties(prefix = "oss-constant") 2. 绑定方法2: 实体配置类, @ConfigurationProperties(prefix = "oss-constant") 在配置类上开启和配置文件(yml, properties)绑定 : @EnableConfigurationProperties(value = {OssConstantConfig.class}) */ @Data @Component @ConfigurationProperties(prefix = "oss-constant") public class OssConstantConfig { private String endpoint; private String accessKey; private String secretKey; private String bucket; }
获取的话,从容器中获取就行了。配置文件中的值会自动装配到Java Bean中。