博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
24. Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
阅读量:5260 次
发布时间:2019-06-14

本文共 3500 字,大约阅读时间需要 11 分钟。

转:http://blog.csdn.net/linxingliang/article/details/52069509

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

...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就能获取到系统环境信息;

 *

 * @authorAngel(QQ:412887952)

 * @version v.0.1

 */

@Configuration

public class MyEnvironmentAware implements EnvironmentAware{

 

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

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

       private String myUrl;

      

       /**

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

        */

       @Override

       public voidsetEnvironment(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." 的属性列表值.

              RelaxedPropertyResolverrelaxedPropertyResolver = 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:://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

public class PageControllerimplementsEnvironmentAware{

 

    @Override

    public void setEnvironment(Environmentenvironment) {

        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位于类路径上

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

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

 

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

publicclass MongoProperties{

 

    private Stringhost;

    privateint port= DBPort.PORT;

    private Stringuri = "mongodb://localhost/test";

    private Stringdatabase;

 

    // ... getters/ setters omitted

}

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

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

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

              <dependency>

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

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

                     <optional>true</optional>

              </dependency>

转载于:https://www.cnblogs.com/ceshi2016/p/6709970.html

你可能感兴趣的文章
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
爬虫学习笔记(一)初识爬虫
查看>>
生成随机数的模板
查看>>
SpringMVC文件上传
查看>>
hdu 2093
查看>>
纸上谈兵: 树, 二叉树, 二叉搜索树[转]
查看>>
Mysql 数据库操作
查看>>
SQL表中的自连接定义与用法示例
查看>>
hdu 1032 The 3n + 1 problem
查看>>
static关键字
查看>>
转:linux终端常用快捷键
查看>>
009.栈实现队列
查看>>
A-Softmax的总结及与L-Softmax的对比——SphereFace
查看>>
关于软件盘覆盖住布局
查看>>
Unity3D 控制物体移动、旋转、缩放
查看>>
UVa 11059 最大乘积
查看>>
UVa 12545 比特变换器
查看>>
数组分割问题求两个子数组的和差值的小
查看>>
10个著名的思想实验1
查看>>