本文主要是介绍springboot启动时替换配置参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SpringBoot启动时配置参数替换
一.背景
- SpringBoot项目启动的时候,在不使用配置中心等的前提下或者有公司强制使用指定的“密码箱”情况下,需要远程获取关键配置信息,比如数据库密码,则需要在项目启动前获取配置并且进行本地配置替换。
二.Demo实现
1.maven依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency></dependencies>
2.application.yml
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: rootinitial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000#Oracle需要打开注释#validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: falsetest-on-return: falsestat-view-servlet:enabled: trueurl-pattern: /druid/*#login-username: admin#login-password: adminfilter:stat:log-slow-sql: trueslow-sql-millis: 1000merge-sql: falsewall:config:multi-statement-allow: true
3.代码实现
- 实现SpringBoot的接口EnvironmentPostProcessor
package com.zzc.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;
import java.util.HashMap;
import java.util.Map;@Configuration
public class TestConfigEnvironmentProcessor implements EnvironmentPostProcessor {private static final Logger log = LoggerFactory.getLogger(TestConfigEnvironmentProcessor.class);@Overridepublic void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {String password = environment.getProperty("spring.datasource.druid.password");System.out.println("System TestConfigEnvironmentProcessor password: " + password);MutablePropertySources mutablePropertySources = environment.getPropertySources();//TODO 创建单例等http请求工具,获取密码箱等配置,替换本地关键的配置Map<String, Object> map = new HashMap<>();map.put("spring.datasource.druid.password", "123456");mutablePropertySources.addFirst(new MapPropertySource("test", map));//自定的配置名称和配置项password = environment.getProperty("spring.datasource.druid.password");System.out.println("System TestConfigEnvironmentProcessor password: " + password);}
}
4.spring.factories配置
- 在src/main/resources目录下创建文件夹META-INF,再创建文件spring.factories文件,新增配置项
org.springframework.boot.env.EnvironmentPostProcessor=\
com.zzc.config.TestConfigEnvironmentProcessor
这篇关于springboot启动时替换配置参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!