SpringBoot支持动态的读取文件,留下的扩展接口org.springframework.boot.env.EnvironmentPostProcessor
。这个接口是spring包下的,使用这个进行配置文件的集中管理,而不需要每个项目都去配置配置文件。这种方法也是springboot框架留下的一个扩展(可以自己去扩展)
demo
在/Users/naeshihiroshi/study/studySummarize/SpringBoot/
(自己测试也可以随机在一个目录下建立一文件),目录下建立一个名为springboot.properties
文件,
springboot.properties
中定义一些配置,配置如下:
jdbc.root.user=zhihao.miao
jdbc.root.password=242312321
定义MyEnvironmentPostProcessor
实现EnvironmentPostProcessor
接口
@Component
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
try{
InputStream inputStream = new FileInputStream("/Users/naeshihiroshi/study/studySummarize/SpringBoot/springboot.properties");
Properties properties = new Properties();
properties.load(inputStream);
PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("my",properties);
environment.getPropertySources().addLast(propertiesPropertySource);
}catch (IOException e){
e.printStackTrace();
}
}
}
在classpath定义一个META-INF
文件夹然后在其下面先建spring.factories
文件,在其中指定:
org.springframework.boot.env.EnvironmentPostProcessor=com.zhihao.miao.processor.MyEnvironmentPostProcessor‘
启动类测试:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
String username = context.getEnvironment().getProperty("jdbc.root.user");
String password = context.getEnvironment().getProperty("jdbc.root.password");
System.out.println("username==="+username);
System.out.println("password==="+password);
context.close();
}
}
打印结果:
username===zhihao.miao
password===242312321
EnvironmentPostProcessor接口官网说明
官方文档如下
Allows for customization of the application's {@link Environment} prior to the application context being refreshed.
允许定制应用的上下文的应用环境优于应用的上下文之前被刷新。(意思就是在spring上下文构建之前可以设置一些系统配置)
EnvironmentPostProcessor implementations have to be registered in
META-INF/spring.factories, using the fully qualified name of this class as the key.
EnvironmentPostProcessor的实现类必须要在META-INF/spring.factories
文件中去注册,并且注册的是全类名。
EnvironmentPostProcessor processors are encouraged to detect whether Spring's
org.springframework.core.Ordered
Ordered interface has been implemented or if the@org.springframework.core.annotation.Order
Order annotation is present and to sort instances accordingly if so prior to invocation.
鼓励EnvironmentPostProcessor处理器检测Org.springframework.core.Ordered
注解,这样相应的实例也会按照@Order注解的顺序去被调用。
网友评论