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

·         @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")

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 系列博客】

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Oracle 11g 导库导不出空表问题
  2. mysql性能优化-慢查询分析、优化索引和配置
  3. 怎样增加windows 系统的环境变量Path的默认长度的限制?
  4. Python的文本数据
  5. codeforces 709C C. Letters Cyclic Shift(贪心)
  6. 分布式流式处理框架:storm简介 + Storm术语解释
  7. vSphere Client上传镜像
  8. 如何利用CSS代码使图片和文字在同一行显示且对齐
  9. windows server 2008 防火墙配置
  10. C#中参数传递【转】
  11. socket编程在windows和linux下的区别
  12. Deep Learning 学习随记(三)续 Softmax regression练习
  13. 4G来临 IT业转型之路当在不远
  14. iso-开发基础知识-5-适配器
  15. 父类中可继承方法在处理private的一个demo
  16. loadrunner 计数器
  17. 《JavaScript高级程序设计》读书笔记 ---执行环境及作用域
  18. Flex 布局:语法篇
  19. iOS 页面之间的专长动画控制器间的转换
  20. python3基础概念

热门文章

  1. CNN tensorflow text classification CNN文本分类的例子
  2. codeforces round #424 div2
  3. 2-2 第二天 利用 QQ 浏览器代理调试端口
  4. PCB 电测试--测试点数自动输出到流程指示中(读取TGZ Stephdr文件)
  5. 前端面试:问到GET和POST两种区别
  6. 带&quot;签名&quot;的请求接口实现
  7. 【Oracle】 手工建库
  8. VHDL之concurrent之generate
  9. Newtonsoft.Json 处理日期格式
  10. 【转载】java实现HTTP请求的三种方式