zoukankan      html  css  js  c++  java
  • (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

     

  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6147118.html
Copyright © 2011-2022 走看看