• (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】


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

    com.kfit.environment.MyEnvironmentAware :

    package com.kfit.environment;

     

    import org.springframework.beans.factory.annotation.Value;

    import org.springframework.boot.bind.RelaxedPropertyResolver;

    import org.springframework.context.EnvironmentAware;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.core.env.Environment;

     

    /**

     * 主要是@Configuration,实现接口:EnvironmentAware就能获取到系统环境信息;

     *

     * @author Angel(QQ:412887952)

     * @version v.0.1

     */

    @Configuration

    public class MyEnvironmentAware implements EnvironmentAware{

     

           //注入application.properties的属性到指定变量中.

           @Value("${spring.datasource.url}")

           private String myUrl;

          

           /**

            *注意重写的方法 setEnvironment 是在系统启动的时候被执行。

            */

           @Override

           public void setEnvironment(Environment environment) {

                 

                  //打印注入的属性信息.

                  System.out.println("myUrl="+myUrl);

                 

                  //通过 environment 获取到系统属性.

                  System.out.println(environment.getProperty("JAVA_HOME"));

                 

                  //通过 environment 同样能获取到application.properties配置的属性.

                  System.out.println(environment.getProperty("spring.datasource.url"));

                 

                  //获取到前缀是"spring.datasource." 的属性列表值.

                  RelaxedPropertyResolver relaxedPropertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.");

                  System.out.println("spring.datasource.url="+relaxedPropertyResolver.getProperty("url"));

           System.out.println("spring.datasource.driverClassName="+relaxedPropertyResolver.getProperty("driverClassName"));

           }

    }

     

    其中application.properties文件信息是:

    ########################################################

    ###datasource

    ########################################################

    spring.datasource.url = jdbc:mysql://localhost:3306/test

    spring.datasource.username = root

    spring.datasource.password = root

    spring.datasource.driverClassName = com.mysql.jdbc.Driver

    spring.datasource.max-active=20

    spring.datasource.max-idle=8

    spring.datasource.min-idle=8

    spring.datasource.initial-size=10

     

     

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

    @Controller

    publicclassPageControllerimplementsEnvironmentAware{

     

        @Override

        publicvoid setEnvironment(Environment environment) {

            String s = environment.getProperty("JAVA_HOME");

            System.out.println(s);

        }

    }

     

    我们还可以通过@ConfigurationProperties 读取application属性配置文件中的属性。

    @Configuration

    @ConditionalOnClass(Mongo.class)

    @EnableConfigurationProperties(MongoProperties.class)

    publicclassMongoAutoConfiguration {

     

        @Autowired

        private MongoProperties properties;

     

    }

    ·         @ConditionOnClass表明该@Configuration仅仅在一定条件下才会被加载,这里的条件是Mongo.class位于类路径上

    ·         @EnableConfigurationPropertiesSpring Boot的配置文件(application.properties)中的spring.data.mongodb.*属性映射为MongoProperties并注入到MongoAutoConfiguration中。

    ·         @ConditionalOnMissingBean说明Spring Boot仅仅在当前上下文中不存在Mongo对象时,才会实例化一个Bean。这个逻辑也体现了Spring Boot的另外一个特性——自定义的Bean优先于框架的默认配置,我们如果显式的在业务代码中定义了一个Mongo对象,那么Spring Boot就不再创建。

     

    @ConfigurationProperties(prefix = "spring.data.mongodb")

    publicclass MongoProperties {

     

        private String host;

        privateint port = DBPort.PORT;

        private String uri = "mongodb://localhost/test";

        private String database;

     

        // ... getters/ setters omitted

    }

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

    以上这个配置需要加入依赖:

    <!--spring-boot-configuration:spring boot 配置处理器; -->

           <dependency>

               <groupId>org.springframework.boot</groupId>

               <artifactId>spring-boot-configuration-processor</artifactId>

               <optional>true</optional>

           </dependency>

     

     

     

    Spring Boot 系列博客】

    0)前言【从零开始学Spring Boot :

    http://412887952-qq-com.iteye.com/blog/2291496

    1spring boot起步之Hello World【从零开始学Spring Boot:

    http://412887952-qq-com.iteye.com/blog/2291500

    2Spring Boot返回json数据【从零开始学Spring Boot

    http://412887952-qq-com.iteye.com/blog/2291508

    16Spring Boot使用Druid(编程注入)【从零开始学Spring Boot

    http://412887952-qq-com.iteye.com/blogs/2292376

    17Spring Boot普通类调用bean【从零开始学Spring Boot】:

    http://412887952-qq-com.iteye.com/blog/2292388

     

    更多查看博客:http://412887952-qq-com.iteye.com/blog

     

  • 相关阅读:
    python字符串与字典转换
    B站弹幕爬取 / jieba分词
    【计算机网络】第四章 网络层(1)
    【计算机网络】第三章 传输层(4)
    【计算机网络】第三章 传输层(3)
    【计算机网络】第三章 传输层(2)
    【计算机网络】第三章 传输层(1)
    【计算机网络】第二章 网络应用(5)
    【计算机网络】第二章 网络应用(4)
    【计算机网络】第二章 网络应用(3)
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147118.html
Copyright © 2020-2023  润新知