SpringBoot支持动态的读取文件,留下的扩展接口org.springframework.boot.env.EnvironmentPostProcessor
。这个接口是spring包下的,使用这个进行配置文件的集中管理,而不需要每个项目都去配置配置文件。这种方法也是springboot框架留下的一个扩展(可以自己去扩展)
demo
在/Users/naeshihiroshi/study/studySummarize/SpringBoot/
(自己测试也可以随机在一个目录下建立一文件),目录下建立一个名为springboot.properties
文件,
springboot.properties
中定义一些配置,配置如下:
jdbc.root.user=zhihao.miaojdbc.root.password=242312321
定义MyEnvironmentPostProcessor
实现EnvironmentPostProcessor
接口
@Componentpublic 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‘
启动类测试:
@SpringBootApplicationpublic 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.miaopassword===242312321