1. 程式人生 > >spring boot environmentaware介面實現環境變數讀取和屬性物件的繫結

spring boot environmentaware介面實現環境變數讀取和屬性物件的繫結

其實獲取系統變數有一種非常簡單的方法,直接一行程式碼搞定,程式碼為:

1 System.getenv().get("JAVA_HOME")

咱們這裡介紹凡是被spring管理的類,實現介面 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變數和application配置檔案中的變數。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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就能獲取到系統環境資訊;
* */ @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檔案資訊是:

1 2 3 4 5 6 7 8 9 10 11 ######################################################## ###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:

1 2 3 4 5 6 7 8 9 @Controller publicclassPageControllerimplementsEnvironmentAware{ @Override publicvoid setEnvironment(Environment environment) { String s = environment.getProperty("JAVA_HOME"); System.out.println(s); } }

我們還可以通過@ConfigurationProperties 讀取application屬性配置檔案中的屬性。

1 2 3 4 5 6 7 8 9 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就不再建立。

1 2 3 4 5 6 7 8 9 10 @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。

以上這個配置需要加入依賴:

1 2 3 4 5 6 <!--spring-boot-configuration:spring boot 配置處理器; --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional

相關推薦

spring boot environmentaware介面實現環境變數讀取屬性物件

其實獲取系統變數有一種非常簡單的方法,直接一行程式碼搞定,程式碼為: 1 System.getenv().get("JAVA_HOME") 咱們這裡介紹凡是被spring管理的類,實現介面 EnvironmentAware 重寫方法 setEnvironment

Spring Boot 環境變數讀取 屬性物件

凡是被Spring管理的類,實現介面 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變數和application配置檔案中的變數。 如: @Configuration public class

Spring Boot 環境變數讀取 屬性物件 RelaxedPropertyResolver

凡是被Spring管理的類,實現介面 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變數和application配置檔案中的變數。 如: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Spring Boot 2.0 新特性(一):配置 2.0 全解析

在Spring Boot 2.0中推出了Relaxed Binding 2.0,對原有的屬性繫結功能做了非常多的改進以幫助我們更容易的在Spring應用中載入和讀取配置資訊。下面本文就來說說Spring Boot 2.0中對配置的改進。 配置檔案繫結 簡單型別 在S

十五、Spring Boot 環境變量讀取 屬性對象的綁定

bean database 環境 autoconf lac autowire 屬性 boot title 凡是被spring管理的類,實現接口 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變量和applicati

Spring Boot 環境變量讀取 屬性對象的綁定

out mar mis ring host 重寫方法 條件 popu ide 凡是被Spring管理的類,實現接口 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變量和application配置文件

Spring boot 配置https 實現java通過https介面訪問

      近來公司需要搭建一個https的伺服器來除錯介面(伺服器用的spring boot框架),剛開始接觸就是一頓百度,最後發現網際網路認可的https安全連結的證書需要去CA認證機構申請,由於是除錯階段就採用了java的keytool工具來生成金鑰檔案

Spring Boot通過Profiles實現環境下配置切換

1、在yml中使用pom定義的maven屬性變數 格式:@[email protected] spring: application: name: dream-web-gateway profiles: active: '@[

Spring Boot 利用 nginx 實現生產環境的偽熱更新

當我們在伺服器部署Java程式,特別是使用了 Spring Boot 生成單一 Jar 檔案部署的時候,單一檔案為我們開發單來的極大的便利性,保障程式的完整性。但同時對我們修改程式中的任何一處都帶來重啟服務的麻煩。如何解決這個問題呢? 測試用程式碼 github 下載 1 問題分析 為了能夠解決這個問題,

Spring boot——helloworld例子實現

and eba -exec odin url 工程目錄 cnblogs per simple 軟件152 緱旭浩 1.新建maven項目,package方式為war. 使用maven的時候,maven會從倉庫中下載依賴的jar包。 新建Maven Pr

spring boot 利用redisson實現redis的分布式鎖

代碼 sched 技術 商品 onf 定義 必須 配置線 oracle 原文:http://liaoke0123.iteye.com/blog/2375469 利用redis實現分布式鎖,網上搜索的大部分是使用java jedis實現的。 redis官方推薦的分布式

Spring Boot使用@Async實現異步調用:自定義線程池

tor color HR cal ace 核心 異步 cond cor    前面的章節中,我們介紹了使用@Async註解來實現異步調用,但是,對於這些異步執行的控制是我們保障自身應用健康的基本技能。本文我們就來學習一下,如果通過自定義線程池的方式來控制異步調用的並發。 定

Spring Boot + MyBatis + Thymeleaf實現簡單留言板應用

crud pro 點擊 htm drop lang data cati col Spring Boot + MyBatis + Thymeleaf實現簡單留言板應用 本項目主要介紹使用Spring Boot + MyBatis + Thymeleaf + Bootstrap

Spring boot集成spring-boot-starter-data-jpa環境搭建

lis ESS hiberna 構建 TP xtend 默認 location col 1、創建Spring boot項目 2、保存等待構建完成 3、增加spring-boot-starter-data-jpa、內存數據庫依賴包hsqldb

Spring Boot使用AOP實現攔截某個方法

ces 文件 commit ransac dex red code join info 1、引入.jarl文件依賴 <!-- Spring Boot Web 依賴 --> <dependency>

Spring Boot使用AOP實現REST接口簡易靈活的安全認證

all 高級 mes 之前 接口 封裝 msg mage ror 本文將通過AOP的方式實現一個相對更加簡易靈活的API安全認證服務。 我們先看實現,然後介紹和分析AOP基本原理和常用術語。 一、Authorized實現1、定義註解 package com.power.de

程式設計實戰篇——Spring Boot 自動配置實現

基於Spring Boot自動配置的思想封裝起來,使其他Spring Boot專案引入後能夠進行快速配置。AutoConfiguration Spring Boot的一個重要特性就是提供了各種各樣的AutoConfiguration。例如DataSourceAutoConfiguration。這樣我們只需要在

Spring Boot 配置檔案詳解:自定義屬性、隨機數、多環境配置等

相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實現快速開發的便捷。我們在Spring Boot使用過程中,最直觀的感受就是沒有了原來自己整合Spring應用時繁多的XML配置內容,替代它的是在pom.xml中引入模組化的Starter POMs,其中各個模組都有自己的預

Spring Boot 整合 Shiro實現許可權控制,親測可用,附帶sql

前提: 本文主要講解Spring Boot 與 Shiro的整合 與許可權控制的實現方式(主要以程式碼實現功能為主),主要用到的技術Spring Boot+Shiro+Jpa(通過Maven構建),並不會涉及到Shiro框架的原始碼分析 如果有想要學習Shiro框架的小夥伴可以去http://shiro.

Spring Boot整合websocket實現群聊,點對點聊天,圖片傳送,音訊傳送

參考:基於https://blog.csdn.net/qq_38455201/article/details/80374712  基礎上進行新增圖片傳送和音訊傳送功能   單點圖片傳送: 單點音訊傳送: 音訊傳送相關js參考:https://github.