SpringBoot 讀取配置文件及profiles切換配置文件

来源:http://www.cnblogs.com/lspz/archive/2017/05/09/6831669.html
-Advertisement-
Play Games

讀取核心配置文件 核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件的方法有兩種,都比較簡單。 先創建一個簡單的springBoot程式,可以參考: "http://www.cnblogs.com/l ...


讀取核心配置文件

核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件的方法有兩種,都比較簡單。

先創建一個簡單的springBoot程式,可以參考:
http://www.cnblogs.com/lspz/p/6344327.html

一、通過@value註解來讀取

核心配置文件application.properties內容如下:

server.port=9090

test.msg=Hello World Springboot!

編製Example.java

  package com.example.web;

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    public class Example {
    
        @RequestMapping("/")
        public String home(@Value("${test.msg}") String msg) {
            return msg;
        }
    }

註意:在@Value的${}中包含的是核心配置文件中的鍵名在Controller類上加@RestController表示將此類中的所有視圖都以JSON方式顯示類似於在視圖方法上加@ResponseBody,spring boo預設已經配置了很多環境變數,例如,tomcat的預設埠是8080,項目的contextpath是“/”等等,我們在application.properties中設置了server.port=9090,重寫了spring boot 內嵌tomcat埠。

訪問:http://localhost:9090 時將得到 Hello World Springboot!

二、使用Environment方式

 package com.example.web;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class WebController {
        @Autowired
        private Environment env;
    
        @RequestMapping(value = "index", method = RequestMethod.GET)
        public String index() {
            return env.getProperty("test.msg");
        }
    }

註意:這種方式是依賴註入Evnironment來完成,在創建的成員變數private Environment env上加上@Autowired註解即可完成依賴註入,然後使用env.getProperty("鍵名")即可讀取出對應的值。

訪問:http://localhost:9090/index 時將得到Hello World Springboot!

三、讀取自定義配置文件

為了不破壞核心文件的原生態,但又需要有自定義的配置信息存在,一般情況下會選擇自定義配置文件來放這些自定義信息,這裡在resources目錄下創建配置文件my-web.properties

resources/my-web.properties內容如下:

com.name=testName
com.password=123

創建管理配置的實體類:

package com.example.model;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:/my-web.properties")
@ConfigurationProperties(prefix = "com")
public class ConfigBean {
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

註意:

spring boot1.5以上版本@ConfigurationProperties取消了location需要用@PropertySource來指定自定義的資源目錄

prefix:指定配置文件中鍵名稱的首碼(我這裡配置文件中所有鍵名都是以web.開頭)

使用@Component是讓該類能夠在其他地方被依賴使用即使用@Autowired註釋來創建實例

創建測試Controller

package com.example.web;

import com.example.model.ConfigBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    ConfigBean configBean;

    @RequestMapping("/user")
    public String user() {
        return configBean.getName() + ":" + configBean.getPassword();
    }
}

由於在ConfigBean類上加了註釋@Component所以可以直接在這裡使用@Autowired來創建其實例對象

訪問:http://localhost:9090/user 時將得到testName:123

四、參數間引用

可以利用${…}在application.properties引用變數
myapp.name=spring
myapp.desc=${myapp.name} nice

五、在application.properties配置隨機變數

在application.properties配置隨機變數,利用的是RandomValuePropertySource類

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

六、使用profiles實現快速切換配置

新建一個properties文件application-prod.properties對應為
生產環節的配置。

application-prod.properties:

server.port=8080
test.msg=This is prod!

接下來,使用CMD進入src目錄打包jar:

mvn package -Dmaven.test.skip=true

success後使用

java -jar -Dspring.profiles.active=prod target/loadProperties-0.0.1-SNAPSHOT.jar運行。

訪問:http://localhost:8080/ 時得到 This is prod!

註意:

發現埠已經變成8080了。這是因為在“application-prod.properties”中規定了server.port=8080。

“java -jar”的命令中使用-D來傳遞參數:
java -jar -D配置=值 jar名.jar
“-Dspring.profiles.active=”用來指定切換到哪個配置,表達式為:“application-${profile}.properties”

七、配置文件優先順序

application.properties和application.yml文件可以放在一下四個位置:

外置,在相對於應用程式運行目錄的/congfig子目錄里。
外置,在應用程式運行的目錄里
內置,在config包內
內置,在Classpath根目錄

同樣,這個列表按照優先順序排序,也就是說,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性,此外,如果你在相同優先順序位置同時有application.properties和application.yml,那麼application.yml裡面的屬性就會覆蓋application.properties里的屬性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目描述 如題,給定一棵有根多叉樹,請求出指定兩個點直接最近的公共祖先。 輸入輸出格式 輸入格式: 第一行包含三個正整數N、M、S,分別表示樹的結點個數、詢問的個數和樹根結點的序號。 接下來N-1行每行包含兩個正整數x、y,表示x結點和y結點之間有一條直接連接的邊(數據保證可以構成樹)。 接下來M行 ...
  • a='我很好' ####python3 預設的編碼為unicode###unicode>gb2312unicode_gb2312=a.encode('gb2312') ###因為預設是unicode所以不需要decode(),直接encode成想要轉換的編碼如gb2312print('我的gb231 ...
  • 預處理語句是由一系列和預處理相關的命令符組成的.預處理語句以#作為起始標記,其後緊跟預處理命令關鍵字,之後是空格,空格之後是預處理命令的內容.C++提供多種預處理功能,如巨集定義,文件包括,條件編譯等. #define 在這個教程的開頭我們已經提到了一種預處理指令: #define ,可以被用來生成巨集 ...
  • spring為開發者提供了一個名為spring boot devtools的模塊來使Spring Boot應用支持熱部署,提高開發者的開發效率,無需手動重啟Spring Boot應用。 devtools的原理 深層原理是使用了兩個ClassLoader,一個Classloader載入那些不會改變的類 ...
  • 1)CDATA部分用<![CDATA[和]]>來限定其界限,它們是字元數據的一種特殊形式,可用使用它們來囊括那些含有<、>,&之類字元的字元串,而不必將它們解釋為標記例如:<![CDATA[<]]>,另外需要註意的是CDATA部分不能包含字元串]]>。 2)處理指令(processing instr ...
  • 題目描述 最近,Elaxia和w的關係特別好,他們很想整天在一起,但是大學的學習太緊張了,他們 必須合理地安排兩個人在一起的時間。Elaxia和w每天都要奔波於宿舍和實驗室之間,他們 希望在節約時間的前提下,一起走的時間儘可能的長。 現在已知的是Elaxia和w**所在的宿舍和實驗室的編號以及學校的 ...
  • 1、簡介 這一篇文章主要介紹的是http協議下載時的斷點續傳,詳細到各個步驟。主要步驟有:DNS查找、TCP三次握手、http請求發送、TCP協議數據傳輸、暫停後的狀態、繼續下載、TCP三次握手、http請求發送、數據傳輸、。。。、下載成功發送http響應信息、TCP四次握手斷開連接。 2、原理知識 ...
  • 在Python中,通常有這幾種方式來表示時間:1)時間戳 2)格式化的時間字元串 3)元組(struct_time)共九個元素。由於Python的time模塊實現主要調用C庫,所以各個平臺可能有所不同。 UTC(Coordinated Universal Time)即格林威治天文時間,為世界標準時... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...