1.读取环境变量

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

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

  1. package me.shijunjie.config;
  2.  
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.boot.bind.RelaxedPropertyResolver;
  5. import org.springframework.context.EnvironmentAware;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.core.env.Environment;
  8.  
  9. @Configuration
  10. public class MyEnvironmentAware implements EnvironmentAware {
  11.  
  12. @Value("${spring.datasource.url}")
  13. private String url;
  14.  
  15. @Override
  16. public void setEnvironment(Environment env) {
  17. //打印注入的属性信息.
  18. System.out.println(url);
  19. //通过 environment 获取到系统属性.
  20. System.out.println(env.getProperty("JAVA_HOME"));
  21. //通过 environment 同样能获取到application.properties配置的属性.
  22. System.out.println(env.getProperty("spring.datasource.url"));
  23. //获取到前缀是"spring.datasource." 的属性列表值.
  24. RelaxedPropertyResolver relaxedPropertyResolver = new RelaxedPropertyResolver(env, "spring.datasource.");
  25. System.out.println("spring.datasource.url="+relaxedPropertyResolver.getProperty("url"));
  26. System.out.println("spring.datasource.driverClassName="+relaxedPropertyResolver.getProperty("driverClassName"));
  27. }
  28.  
  29. }

启动应用

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

  1. package me.shijunjie.controller;
  2.  
  3. import org.springframework.context.EnvironmentAware;
  4. import org.springframework.core.env.Environment;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7.  
  8. @RestController
  9. @RequestMapping("/test2")
  10. public class TestController implements EnvironmentAware {
  11.  
  12. /*@Resource(name="TestAutoConfiguration2")
  13. private TestAutoConfiguration testAutoConfiguration;*/
  14.  
  15. @Override
  16. public void setEnvironment(Environment env) {
  17. String s= env.getProperty("JAVA_HOME");
  18. System.out.println("JAVA_HOME2"+s);
  19. }
  20.  
  21. @RequestMapping("/hello")
  22. public String test() {
  23.  
  24. /*System.out.println(testAutoConfiguration.getDataSourceProperties().getName());
  25. System.out.println(testAutoConfiguration.getDataSourceProperties().getPassword());
  26. System.out.println(testAutoConfiguration.getDataSourceProperties().getUrl());*/
  27. return "hello";
  28. }
  29.  
  30. }

启动应用

2.绑定属性对象

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

  1. package me.shijunjie.config;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
  5. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8.  
  9. import me.shijunjie.properties.DataSourceProperties;
  10.  
  11. @Configuration
  12. @ConditionalOnClass(DataSourceProperties.class)
  13. @EnableConfigurationProperties(DataSourceProperties.class)
  14. public class TestAutoConfiguration {
  15. @Autowired
  16. private DataSourceProperties dataSourceProperties;
  17.  
  18. @Bean(name="TestAutoConfiguration2")
  19. public TestAutoConfiguration setTestAutoConfiguration() {
  20. return this;
  21. }
  22.  
  23. public DataSourceProperties getDataSourceProperties() {
  24. return dataSourceProperties;
  25. }
  26.  
  27. public void setDataSourceProperties(DataSourceProperties dataSourceProperties) {
  28. this.dataSourceProperties = dataSourceProperties;
  29. }
  30.  
  31. }
  1. package me.shijunjie.properties;
  2.  
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4.  
  5. @ConfigurationProperties(prefix = "spring.datasource")
  6. public class DataSourceProperties {
  7. private String url;
  8. private String name = "testName";
  9. private String password;
  10. public String getUrl() {
  11. return url;
  12. }
  13. public void setUrl(String url) {
  14. this.url = url;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public String getPassword() {
  23. return password;
  24. }
  25. public void setPassword(String password) {
  26. this.password = password;
  27. }
  28.  
  29. }

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

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

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

测试

  1. package me.shijunjie.controller;
  2.  
  3. import javax.annotation.Resource;
  4.  
  5. import org.springframework.context.EnvironmentAware;
  6. import org.springframework.core.env.Environment;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9.  
  10. import me.shijunjie.config.TestAutoConfiguration;
  11.  
  12. @RestController
  13. @RequestMapping("/test2")
  14. public class TestController implements EnvironmentAware {
  15.  
  16. @Resource(name="TestAutoConfiguration2")
  17. private TestAutoConfiguration testAutoConfiguration;
  18.  
  19. @Override
  20. public void setEnvironment(Environment env) {
  21. String s= env.getProperty("JAVA_HOME");
  22. System.out.println("JAVA_HOME2"+s);
  23. }
  24.  
  25. @RequestMapping("/hello")
  26. public String test() {
  27.  
  28. System.out.println(testAutoConfiguration.getDataSourceProperties().getName());
  29. System.out.println(testAutoConfiguration.getDataSourceProperties().getPassword());
  30. System.out.println(testAutoConfiguration.getDataSourceProperties().getUrl());
  31. return "hello";
  32. }
  33.  
  34. }

打开浏览器,输入地址http://localhost:8080/test2/hello

这里告诉我们DataSourceProperties就是以spring.datasource作为前缀的属性,然后通过名字直接映射为对象的属性,同时还包含了一些默认值。如果不配置,那么spring.datasource.username就是jdbc:mysql://123.206.228.200:3306/test

网上资料上写绑定属性对象需要添加依赖(我没有加)

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

<dependency>

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

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

<optional>true</optional>

</dependency>

这边是我的application.properties文件

########################################################
###datasource
########################################################

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

spring.datasource.username = shijunjie

spring.datasource.password = *****

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

spring.datasource.max-active=20

spring.datasource.max-idle=8

spring.datasource.max-maxWait=100

spring.datasource.min-idle=8

spring.datasource.initial-size=10

[十六]SpringBoot 之 读取环境变量和绑定属性对象的更多相关文章

  1. 20.SpringBoot 之 读取环境变量和绑定属性对象

    转自:https://blog.csdn.net/catoop/article/details/50548009

  2. 十五、Spring Boot 环境变量读取 和 属性对象的绑定

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

  3. [CentOS] 解决 crontab 无法读取环境变量的问题

    参考资料:http://blog.slogra.com/post-238.html 1. 问题描述 一段数据处理的 shell 程序,在 shell 中手动运行,可以正确执行.但是,把它放在 cron ...

  4. crontab读取环境变量方法

    crontab如果不注意的话早晚会出问题,而且这种问题一旦出一次,就会永远记得,因为这种问题很折腾人.                                                  ...

  5. python 读取环境变量

    python 读取环境变量 前言 在使用python时候千万不要把账户密令直接写入脚本,特别是当你计划开源自己的作品时. 为了保护账户信息,你需要让脚本从环境中导入敏感信息. 读取方法 import ...

  6. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  7. Java开发学习(三十六)----SpringBoot三种配置文件解析

    一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...

  8. mac os x10.11.2系统eclipse无法读取环境变量的问题

    eclipse调试Android自动化脚本的时候一直无法找到adb,遇到这么坑的问题,折腾死了,记录一下. mac os x10.11.2系统GUI程序(eclipse)无法读取~/.bash_pro ...

  9. java 读取环境变量和系统变量的方法

    在web开发的过程中不免需要读取一些自定义的jvm系统变量或者环境变量.比如定义一些通用的log文件.或者数据库访问路径. 我们可以使用System.getProperties()读取所有的系统变量. ...

随机推荐

  1. python中快速获取本地时区当天0点时间戳的一种方法

    如下所示,看了网上的几种方法,这种方法算是代码量比较小的,同时可以保证求的是本地时区的0点时间戳,返回的是浮点数,需要的话自己转一下int In [1]: import time In [2]: fr ...

  2. lnmp环境搭建(centos6.9+mysql5.7+php7.1+nginx1.10)

    安装前准备:CentOS 6.9 64位 最小化安装 yum install -y make gcc gcc-c++ perl zlib-devel libaio libpng libpng-deve ...

  3. JS基础,课堂作业,相亲问答

    相亲问答 <script> var a = prompt("你有房子么?"); var b = prompt("你有钱么?"); var c = p ...

  4. 那些年安装Appium遇到的坑

      安装appium以及相关的总体记录   1 主要流程是参照这个来 https://www.cnblogs.com/wangyinghao/p/5780151.html 细节参考虫师的博客 http ...

  5. PHPCMS的产品筛选功能

    如下图所示功能: 首先,用下面这些代码替换掉phpcms/libs/functions/extention.func.php的内容 <?php /** * extention.func.php ...

  6. Delphi 中的 RectTracker - 原创

    本文算是副产品,正品是利用 FFmpeg 从任意视频中生成GIF片段的小程序,写完了就发. V2G 正品已出炉,虽然不大像样,但好歹是能用,请见:用 Delphi 7 实现基于 FFMS2 的视频转 ...

  7. 电脑提示‘您需要来自Administration的权限才能对此文件夹进行更改’怎么删除文件

    电脑提示'您需要来自Administration的权限才能对此文件夹进行更改'怎么删除文件 应该怎么做 win7系统需要定期删除一些无用的文件,扩大内存空间,但是在删除文件的时候弹出提示"您 ...

  8. 学习GIT 你只要这一篇(转)

    http://blog.csdn.net/afei__/article/details/51476529 安装之后第一步 安装 Git 之后,你要做的第一件事情就是去配置你的名字和邮箱,因为每一次提交 ...

  9. Scrum立会报告+燃尽图 05

    此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2195] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达 ...

  10. Scrum立会报告+燃尽图 03

    此作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达,祁 ...