zoukankan      html  css  js  c++  java
  • Spring Boot 环境变量读取 和 属性对象的绑定

    凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 能够在project启动时,获取到系统环境变量和application配置文件里的变量。


    如:

    @Configuration
    public class MyWebAppConfigurer implements EnvironmentAware
            {
        private static final Logger logger = LoggerFactory.getLogger(MyWebAppConfigurer.class);
    
        private RelaxedPropertyResolver propertyResolver;
    
        @Value("${spring.datasource.url}")
        private String myUrl;
    
        /**
         * 这种方法不过測试实现EnvironmentAware接口,读取环境变量的方法。
         */
        @Override
        public void setEnvironment(Environment env) {
            logger.info(env.getProperty("JAVA_HOME"));
            logger.info(myUrl);
            String str = env.getProperty("spring.datasource.url");
            logger.info(str);
            propertyResolver = new RelaxedPropertyResolver(env, "spring.datasource.");
            String url = propertyResolver.getProperty("url");
            logger.info(url);
        }
    }

    @Controller @Service 等被Spring管理的类都支持,注意重写的方法 setEnvironment 是在系统启动的时候被运行。
    或者例如以下Controller:

    @Controller
    public class PageController implements EnvironmentAware{
    
        @Override
        public void setEnvironment(Environment environment) {
            String s = environment.getProperty("JAVA_HOME");
            System.out.println(s);
        }
    }

    我们还能够通过@ConfigurationProperties 读取application属性配置文件里的属性。

    @Configuration
    @ConditionalOnClass(Mongo.class)
    @EnableConfigurationProperties(MongoProperties.class)
    public class MongoAutoConfiguration {
    
        @Autowired
        private MongoProperties properties; 
    
    }
    • @ConditionOnClass表明该@Configuration只在一定条件下才会被载入。这里的条件是Mongo.class位于类路径上
    • @EnableConfigurationProperties将Spring Boot的配置文件(application.properties)中的spring.data.mongodb.*属性映射为MongoProperties并注入到MongoAutoConfiguration中。
    • @ConditionalOnMissingBean说明Spring Boot只在当前上下文中不存在Mongo对象时,才会实例化一个Bean。

      这个逻辑也体现了Spring Boot的另外一个特性——自己定义的Bean优先于框架的默认配置,我们假设显式的在业务代码中定义了一个Mongo对象,那么Spring Boot就不再创建。

    @ConfigurationProperties(prefix = "spring.data.mongodb")
    public class MongoProperties {
    
        private String host;
        private int port = DBPort.PORT;
        private String uri = "mongodb://localhost/test";
        private String database;
    
        // ... getters/ setters omitted
    } 

    它就是以spring.data.mongodb作为前缀的属性,然后通过名字直接映射为对象的属性,同一时候还包括了一些默认值。假设不配置,那么mongo.uri就是mongodb://localhost/test。

  • 相关阅读:
    一文读懂比特币的软分叉
    区块链的七阶段位,你属于哪一段?
    总价值超26.7亿美元的5个最富有比特币地址汇总
    智能合约的沙箱机制是什么?
    区块链的核心技术是什么?
    区块链和比特币常见的七大误区
    矿机论斤卖?夸大其词
    比特币跌破5000美元的三大影响因素
    微软Azure区块链开发工具包三大功能详解
    各大自媒体平台的收益情况汇总
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7396864.html
Copyright © 2011-2022 走看看