在spring启动加载完配置后,我们自定义一个Environment后置处理器,来修改配置。
背景知识:
1、spring中配置可以从Environment中获取。
2、ApplicaitonContext接口包含getEnvironment功能。
3、EnvironmentPostProcessor接口是Environment的后置处理器
4、springboot的spring.factorys文件可以自定义EnvironmentPostProcessor实现。
1、在项目resources下创建META-INF/spring.factories文件,内容如下:
org.springframework.boot.env.EnvironmentPostProcessor=\
com.example.demo.DemoEnvironment
2、创建自定义类DemoEnvironment,注:String name 视情况而定
public class DemoEnvironment implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
String name = "applicationConfig: [classpath:/application-dev.properties]";
MapPropertySource propertySource = (MapPropertySource) environment.getPropertySources().get(name);
Map<String, Object> source = propertySource.getSource();
Map map = new HashMap();
source.forEach((k, v) -> {
map.put(k , v);
});
map.replace("server.port", 8022);
environment.getPropertySources().replace(name, new MapPropertySource(name, map));
目标:在spring启动加载完配置后,我们自定义一个Environment后置处理器,来修改配置。背景知识:1、spring中配置可以从Environment中获取。2、ApplicaitonContext接口包含getEnvironment功能。3、EnvironmentPostProcessor接口是Environment的后置处理器4、springboot的spring.factorys文件可以自定义EnvironmentPostProcessor实现。方法:1、在项目resourc
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource.
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URLDecoder;
import java.util.Properties;
#记 springboot修改配置文件(properties或yml)
最近项目开发快完成了(ssm—>springboot架构),在项目构建过程中有很多数据都是配置在properties或yml文件中,昨天经理给我提了个需求:写个api去修改配置文件中的数据值,然后还要用日志记录.
当然作为一个java程序员(面向百度程序员…呸! 面向对象…)本着学习的精神去搜索了一波大神们的操作,结果发...
以SpringCloud 为例,希望服务在启动后根据某些信息生成一个动态的 实例ID
也就是application.yaml中配置的如Eureka的配置
eureka:
instance:
instance-id: ID
我们如果希望在服务启动时候随机生成一个instance-id,首先找到
可以使用BeanPostProcessor在Bean实例化之后对他进行修改eureka.in...
将配置文件写入到数据库中,通过修改之后,不用重启项目,能实时生效
如果想要实现只要数据库数据被修改就实时生效,(从任何地方修改数据库数据),可以使用阿里的中间件 canal
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DynamicConf {
String value();
String defaultValue() default
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
application.yml
我可以回答这个问题。application.properties是Spring Boot应用程序中的配置文件,可以用来配置数据库连接信息,例如数据库的URL、用户名、密码等。在该文件中,可以使用以下格式来配置数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
其中,spring.datasource.url表示数据库的URL,spring.datasource.username表示数据库的用户名,spring.datasource.password表示数据库的密码。这些信息可以根据实际情况进行修改。