springboot 配置资源统一管理

浅浅的花香味﹌ 2022-04-08 09:24 428阅读 0赞

在一个springboot的项目中创建一个加载资源的类
LoadPropertiesConfig

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.util.Properties;
  6. import org.slf4j.Logger;
  7. import org.springframework.boot.SpringApplication;
  8. import org.springframework.boot.env.EnvironmentPostProcessor;
  9. import org.springframework.core.Ordered;
  10. import org.springframework.core.env.ConfigurableEnvironment;
  11. import org.springframework.core.env.MutablePropertySources;
  12. import org.springframework.core.env.PropertiesPropertySource;
  13. public class LoadPropertiesConfig implements EnvironmentPostProcessor, Ordered {
  14. private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(LoadPropertiesConfig.class);
  15. @Override
  16. public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
  17. //此处可以http方式 到配置服务器拉取一堆公共配置+本项目个性配置的json串,拼到Properties里
  18. Properties properties = new Properties();
  19. try {
  20. properties.load(
  21. new FileInputStream(new File("D:\\service\\demo-parents\\springboot-app\\application.properties")));
  22. } catch (FileNotFoundException e) {
  23. LOG.error("error message", e);
  24. } catch (IOException e) {
  25. LOG.error("error message", e);
  26. }
  27. MutablePropertySources propertySources = environment.getPropertySources();
  28. //addLast 结合下面的 getOrder() 保证顺序 读者也可以试试其他姿势的加载顺序
  29. propertySources.addLast(new PropertiesPropertySource("thirdEnv", properties));
  30. }
  31. @Override
  32. public int getOrder() {
  33. // +1 保证application.propertie里的内容能覆盖掉本配置文件中默认的
  34. // 如果不想被覆盖 可以去掉 +1 或者 -1 试试
  35. return Integer.MIN_VALUE;
  36. }
  37. }

这样就实现了用远程资源覆盖本地资源的情况
测试代码

  1. @SpringBootApplication
  2. @ComponentScan
  3. public class Application {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Application.class, args);
  6. }
  7. }
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. /** * 类PropertiesCheckController.java的实现描述:验证自定义配置文件 * * @author xupeng 2017年3月16日 下午4:04:24 */
  12. @RestController
  13. public class PropertiesCheckController {
  14. @Value("${name}")
  15. private String name;
  16. @RequestMapping("/showName")
  17. public String showName() {
  18. return name;
  19. }
  20. }

本地配置文件

  1. name=ceshi

远程配置文件

  1. name=name

用以上代码测试,当没有加载到远程资源的时候访问showName
返回的是ceshi当资源被覆盖之后就会显示name

发表评论

表情:
评论列表 (有 0 条评论,428人围观)

还没有评论,来说两句吧...

相关阅读