1. 程式人生 > >Spring Boot 支援多種外部配置方式

Spring Boot 支援多種外部配置方式

Spring Boot 屬性配置和使用

Spring Boot 允許通過外部配置讓你在不同的環境使用同一應用程式的程式碼,簡單說就是可以通過配置檔案來注入屬性或者修改預設的配置。這些方式優先順序如下:

1.命令列引數

(1).通過java -jar app.jar –name=”Spring” –server.port=9090方式來傳遞引數。引數用–xxx=xxx的形式傳遞。

(2).可以使用的引數可以是我們自己定義的,也可以是Spring Boot中預設的引數。
(3).注意:命令列引數在app.jar的後面!
可以通過SpringApplication.setAddCommandLineProperties(false)禁用命令列配置。
2.來自java:comp/env的JNDI屬性

J2EE上下文環境變數字首,一般有如下幾種:
java:/comp/env/jdbc
java:/comp/env/url
java:/comp/env/mail
java:/comp/env/jms
在部署和執行EJB中,容器將在java:/comp/env/處建立一個JNDI上下文環境,在該環境中,可以查詢獲得
在ejb-jar.xml中定義的變數,通過在程式中用JNDI的lookup()方法查詢java:/comp/env/後面的變數名得到的.這些值是隻讀的,也只供本地J2EE元件使用,而客戶機無法獲取這些值.

3.Java系統屬性(System.getProperties())
(1).注意Java系統屬性位置java -Dname=”demo” -jar app.jar,可以配置的屬性都是一樣的,優先順序不同。
(2).例如java -Dname=”demo” -jar app.jar –name=”Spring!”中name值為Spring!
4.作業系統環境變數

配置過JAVA_HOME的應該都瞭解這一個。同一樣的,如果在統環境變數環境變數這增加PRO_ENV=test的環境變數,則下面的配置會生效,即讀取application-{profile}.properties或application-{profile}.yml並且profile為test的配置檔案,而不是profile為local的配置檔案。

spring:
  profiles: 
    active: ${PRO_ENV,local}

5.RandomValuePropertySource配置的random.*屬性值

系統中用到隨機數的地方,例如:

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

random.int()支援value引數和max引數,當提供max引數的時候,value就是最小值。

6.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置檔案

(1).在properties配置檔案中直接寫:

name=demo

server.port=8080

: (2).yml格式的配置檔案如:

name: demo
server:
  port: 8080

當有字首的情況下,使用.yml格式的配置檔案更簡單。

注意:使用.yml時,屬性名的值和冒號中間必須有空格,如name: demo正確,name:demo就是錯的。

(3).屬性配置檔案的位置

spring會從classpath下的/config目錄或者classpath的根目錄查詢application.properties或application.yml。/config優先於classpath根目錄

7.jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置檔案

具體配置同上。

8.jar包外部的application.properties或application.yml(不帶spring.profile)配置檔案

具體配置同上。

9.jar包內部的application.properties或application.yml(不帶spring.profile)配置檔案

具體配置同上。

[email protected]註解類上的@PropertySource

這個註解可以指定具體的屬性配置檔案,優先順序比較低。

11.通過SpringApplication.setDefaultProperties指定的預設屬性

SpringApplication application = new SpringApplication(Application.class);
Map<String, Object> defaultMap = new HashMap<String, Object>();
defaultMap.put("spring.profiles.active", "local");
//還可以是Properties物件
application.setDefaultProperties(defaultMap);
application.run(args);
12.spring boot配置屬性的使用

(1)[email protected](“${xxx}”)

這種方式是最簡單的,通過@Value註解可以將屬性值注入進來。

(2)[email protected]

Spring Boot 可以方便的將屬性注入到一個配置物件中。例如:

spring:
  datasource:
    druid:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ddemo?useUnicode=true&characterEncoding=utf-8
      username: root
      password: 555222
      filters: stat
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

對應物件:

@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DatasourceProperties {

    private String driverClassName;

    private String url;

    private String username;

    private String password;

    private String filters;

    private String connectionProperties;

    // ... getters and setters
}

Spring Boot 會自動將prefix=”spring.datasource.druid”字首為my的屬性注入進來。

Spring Boot 會自動轉換型別,當使用List的時候需要注意在配置中對List進行初始化!

:(3).Spring Boot 還支援巢狀屬性注入,例如:

name=isea533
jdbc.username=root
jdbc.password=root
...

對應的配置類:

@ConfigurationProperties
public class Config {
    private String name;
    private Jdbc jdbc;
    class Jdbc {
        private String username;
        private String password;
        //getter...
    }

    public Integer gePort(){
        return this.port;
    }
    public Jdbc getJdbc() {
        return this.jdbc;
    }
}

jdbc開頭的屬性都會注入到Jdbc物件中。

13.屬性佔位符

例如:

app:
  name: demo
  description: ${app.name} is a Spring Boot application
可以在配置檔案中引用前面配置過的屬性(優先順序前面配置過的這裡都能用)。

(1).通過如${app.name:預設名稱}方法還可以設定預設值,當找不到引用的屬性時,會使用預設的屬性。

由於MavenpomspringbootstarterparentSpringBootmavenresourcesplugins{}方式改為了@ @方式,例如@[email protected]
(2)如果你是引入的Spring Boot,你可以修改使用其他的分隔符

通過屬性佔位符還能縮短命令引數
例如修改web預設埠需要使用–server.port=9090方式,如果在配置中寫上:

server:
  port: ${port:8080}

那麼就可以使用更短的–port=9090,當不提供該引數的時候使用預設值8080。

14.屬性名匹配規則

例如有如下配置物件:

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
    private String firstName;
}

firstName可以使用的屬性名如下:

1>.person.firstName,標準的駝峰式命名
2>.person.first-name,虛線(-)分割方式,推薦在.properties和.yml配置檔案中使用
3>.PERSON_FIRST_NAME,大寫下劃線形式,建議在系統環境變數中使用

15.屬性驗證

可以使用JSR-303註解進行驗證,例如:

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
    @NotNull
    private InetAddress remoteAddress;
    // ... getters and setters
}

相關推薦

Spring Boot 支援多種外部配置方式

Spring Boot 屬性配置和使用 Spring Boot 允許通過外部配置讓你在不同的環境使用同一應用程式的程式碼,簡單說就是可以通過配置檔案來注入屬性或者修改預設的配置。這些方式優先順序如下: 1.命令列引數 (1).通過java -jar

spring boot整合dubbo,Spring boot +Dubbo,簡易的配置方式

        剛做完一個基於motan的專案不久,便去看看dubbo的新特性了,dubbo自上年9月恢復更新到現在大概半年多,發現已經有和spring boot整合的配置了。個人喜歡的配置方式優先順序一般都是資原始

Spring Boot實踐——用外部配置填充Bean屬性的幾種方法

引用:https://blog.csdn.net/qq_17586821/article/details/79802320   spring boot允許我們把配置資訊外部化。由此,我們就可以在不同的環境中使用同一套程式程式碼。可以使用屬性檔案,yaml檔案,環境變數,命令列引數來實現配置資訊的外

Spring boot + Mybatis(基於xml配置方式) WEB專案

一.工具(idea) 二.建立專案 最後finish; 3.配置與編寫demo     目錄: 3.1 springBoot配置檔案:application.yml;也可使用properties檔案 spring: #資料來源配置 datas

Spring-boot中讀取核心配置檔案application和自定義properties配置檔案的方式

前言:瞭解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置檔案application.properties,當然也可以通過註解自定義配置檔案**.properties的資

spring boot中多環境配置支援

一、說明     在我們的日常開發中,生產環境的配置和測試環境的配置以及開發環境的配置基本上都是不相同的,每次到部署環境的時候,就需要手動的切換配置檔案,如果在切換的過程中一不小心的話,就會出錯,所以在開發中,一般會搞個配置檔案檢查的功能,來避免出錯,而spring boo

Spring-boot中讀取config配置檔案的兩種方式

瞭解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置檔案application.properties,當然也可以通過註解自定義配置檔案的資訊。 Spring-Boot讀取配置檔案的方式: 一.讀取核心配置檔案資訊application.p

spring boot+mybatis】註解使用方式(無xml配置)設定自動駝峰明明轉換(mapUnderscoreToCamelCase),IDEA中xxDao報錯could not autowi

最近使用spring boot+mybatis,使用IntelliJ IDEA開發,記錄一些問題的解決方法。1、在使用@Mapper註解方式代替XXmapper.xml配置檔案,使用@Select等註解配置sql語句的情況下,如何配置資料庫欄位名到JavaBean實體類屬性命

spring boot】2.0 配置@cacheable 自定義序列化方式 快取資料到redis

一·背景描述  spring 的  @cacheable 已成為我們比較常用的快取資料的方式,但是把非String物件快取到redis後在使用RedisDesktopManager等軟體檢視快取的資料的時候 展示的是HEX 資料,觀察起來比較不方便,所以我們這裡自定義了Fas

Spring boot 下Freemarker的註解方式配置

<span style="font-size:18px;"><span style="color:#3333FF;">1.建立FreemarkerConfig使用@Configuration將Freemarker需要的配置注入</span>

Spring Boot 部署與服務配置

端口 pattern alt getclass utf-8 打包成 interface ber eba Spring Boot 其默認是集成web容器的,啟動方式由像普通Java程序一樣。main函數入口啟動。其內置Tomcat容器或Jetty容器,詳細

spring boot 數據源 配置

jdbc pro color local led 時間 nec ive statement #數據庫訪問配置 #mysql #spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #spring.dat

Spring Boot安全設計的配置

reat 攻擊 authorize etl ror tps objectc prot page   Web應用的安全管理,包括兩個方面:一是用戶身份認證,即用戶登錄的設計;另一方面是用戶的授權,即一個用戶在一個應用系統中能夠執行哪些操作的權限管理。我這裏使用spring-c

Spring(十二)使用Spring的xml文件配置方式實現AOP

註解 asp odi ns2 package hit 實現 object space 配置文件與註解方式的有非常大不同,多了非常多配置項。 beans2.xml <?xml version="1.0" encoding="UT

Spring Boot Dubbo applications.properties 配置清單

pro ica detail article color log rop style href 參考鏈接:http://blog.csdn.net/jeffli1993/article/details/71480627 Spring Boot Dubbo applicati

十六、Spring Boot 部署與服務配置

truct package pen vra 技術分享 時間 gprof ica 情況 spring Boot 其默認是集成web容器的,啟動方式由像普通Java程序一樣,main函數入口啟動。其內置Tomcat容器或Jetty容器,具體由配置來決定(默認Tomcat)。當然

關於Spring boot中讀取屬性配置文件出現中文亂碼的問題

led Coding uri oot serve http 添加 message 程序 1.再配置文件(application.properties)中添加編碼字符集 #返回頁面、數據中文亂碼問題spring.http.encoding.force=truespring.h

spring boot 導入xml配置文件所需註解和禁用自動配置類的註解

gpo exclude col 開始 XML post 正在 pri ann 導入XML配置 如果您絕對必須使用基於XML的配置,我們建議您仍然從一個@Configuration類開始。然後您可以使用@ImportResource註釋來加載XML配置文件。

spring AOP的兩種配置方式

can 之前 top () 就是 記錄 string -s 服務   連接點(JoinPoint) ,就是spring允許你是通知(Advice)的地方,那可就真多了,基本每個方法的前、後(兩者都有也行),或拋出異常是時都可以是連接點,spring只支持方法連接點。其

關於Spring boot中讀取屬性配置文件出現中文亂碼的問題的解決(針對application.properties)

HA inf encoding 屬性 文件中 ide for 出現 spring 兩種方法: 方法一:在配置文件中設置中文編碼: banner.charset=utf-8server.tomcat.uri-encoding=UTF-8spring.http.encoding