一、配置文件
1. 配置文件分類
A. 按作用分類
application:由ApplicationContext加載的,用於spring boot項目的自動化配置;
bootstrap:由父ApplicationContext加載的,比applicaton優先加載,且boostrap里面的屬性不能被覆蓋;
B. 按格式分類:
.properties:數據無序,數據類型單一;
.yml: 文件更加結構化,數據有序,數據類型多樣化,支持數組[],對象{},集合-,map等;
2. 配置文件默認位置及執行順序
A. 項目根目錄下的config目錄下:最先加載;
B. 項目根目錄下:第二加載;
C. resources目錄下的config目錄下:第三加載;
D. resources目錄下(application.properties默認位置):最后加載;
當然可以通過spring.config.location自定義配置文件位置,通過spring.config.lname自定義文件名。
2. 配置屬性讀取方式
A. @ConfigurationProperties注解(適用於配置屬性較多的情況)
首先要在main方法啟動類上加@EnableConfigurationProperties,然后在自定義bean上加@ConfigurationProperties注解。
B. @Value注解(適用於配置屬性較少的情況)
I. @Value(${property:defaultValue}):配置文件里對應的屬性,defaultValue為屬性為空時默認值,若屬性沒有且默認值沒有,類啟動就會報錯
II. @Value(#{obj.property?:defaultValue}):SPEL表達式對應的內容,obj代表對象
III. @Value的處理器StringValueResolver初始化時機是PropertySourcesPlaceholderConfigurer類postProcessBeanFactory方法中,而處理@Value屬性解析的時機是在getBean中的處理依賴resolveDependency方法中
示例:由於redis可能部署單機或集群,所以shiro授權緩存redis,可能因配置不同而不同
C. Environment方式
注入Environment類,然后調用getProperty()方法獲取屬性值
D. 自定義配置文件(適用於業務方面的參數配置)
自定義bean上加上@Configuration和@ConfigurationProperties注解
3. 多環境配置(application-{profile}.properties)
A. 開發環境:profile ——> dev
B. 測試環境:profile ——> test
C. 生產環境:profile ——> prod
啟動方式:spring.profies.active = dev
二、配置信息ENC加密
1. Maven依賴
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
2. 配置類
package com.ruhuanxingyun.minio.config; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; import org.springframework.context.annotation.Configuration; /** * @description: 配置文件屬性加解密配置類 * @author: ruphie * @date: Create in 2020/12/11 21:46 * @company: ruhuanxingyun */ @Configuration @EnableEncryptableProperties public class JasyptConfig { }
3. 生成加密密文
package com.ruhuanxingyun.minio; import org.jasypt.encryption.StringEncryptor; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ApplicationTests { @Autowired private StringEncryptor stringEncryptor; @Test void contextLoads() { String accessKey = stringEncryptor.encrypt("ruphie"); String secretKey = stringEncryptor.encrypt("minio"); System.out.println("加密后賬號:"+ accessKey); System.out.println("加密后密碼:"+ secretKey); } }
4. 配置密文
A. 默認格式是ENC(密碼);
B. 必須指定jasypt.encryptor.password參數;
C. 秘鑰可以存放在配置文件或環境變量上;
minio: endpoint: http://localhost:9000 access-key: ENC(xbtRi4G2Ax2Gk+jh7BYs2g==) secret-key: ENC(7vH6RnOeeZRs+zSKyqaj4A==) jasypt: encryptor: password: 20201211