第八節:SpringBoot指定配置文件配置三


SpringBoot配置屬性的規則

  • 通過.分離各個元素
  • 最后一個.將前綴與屬性名稱分開
  • 必須是字母(az)和數字(0-9)
  • 必須是小寫字母
  • 用連字符-來分隔單詞
  • 唯一允許的其他字符是[和],用於List的索引
  • 不能以數字開頭

相同的配置項

Spring Boot 2.x 加載配置文件的時候會移除特殊字符並且還會將配置均用全小寫的方式進行匹配和加載。

application.properties

com.rumenz.id-name=rumenz
com.rumenz.id_name=rumenz
com.rumenz.idName=rumenz
com.rumenz.idname=rumenz

測試

package com.rumenz.lession8.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @className: RumenzController
 * @description: TODO 類描述
 * @author: 入門小站 rumenz.com
 * @date: 2021/11/8
 **/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {


    @Value("${com.rumenz.idname}")
    private String comRumenzIdName;

    @RequestMapping("/index")
    @ResponseBody
    public String index(){
        return comRumenzIdName;
    }
}

瀏覽器訪問http://127.0.0.1:8080/rumenz/index,返回rumenz

以上4個配置項是等價的,推薦全小寫中間用-分割。

配置文件的優先級

application.properties和application.yml文件可以在放在以下幾個位置。

  • 外部:應用程序運行目錄的config子目錄
  • 外部:應用程序運行目錄的跟目錄
  • 內部:在config包里面classpath:/config/
  • 內部:在classpath根目錄classpath:/
路徑 參數值
/springboot-zhinan/lession8/config/application.properties com.rumenz.level=1
/springboot-zhinan/lession8/application.properties com.rumenz.level=2
/springboot-zhinan/lession8/src/main/resources/config/application.properties com.rumenz.level=3
/springboot-zhinan/lession8/src/main/resources/application.properties com.rumenz.level=4

application.properties中配置了com.rumenz.level

com.rumenz.level=1

測試

package com.rumenz.lession8.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @className: RumenzController
 * @description: TODO 類描述
 * @author: 入門小站 rumenz.com
 * @date: 2021/11/8
 **/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {
    
    @Value("${com.rumenz.idname}")
    private String comRumenzIdName;

    @Value("${com.rumenz.level}")
    private String comRumenzLevel;

    @RequestMapping("/index")
    @ResponseBody
    public String index(){
        return comRumenzIdName;
    }

    @RequestMapping("/index1")
    @ResponseBody
    public String index1(){
        return comRumenzLevel;
    }

}

使用mvn clean package打包后,使用jar -jar lession8-0.0.1-SNAPSHOT.jar運行。如果上述4個地方都定義了application.properties,並且都配置了com.rumenz.level ,當我們的業務里面需要用com.rumenz.level配置項。查找的優先級是:

  • 1.先找運行目錄下的config的application.properties中的com.rumenz.level,找到返回,否則下一步
  • 2.再找運行目錄下的application.properties中的com.rumenz.level,找到返回否則下一步
  • 3.再找classpath下的config目錄的application.propertiescom.rumenz.level,找到返回否則下一步
  • 4.再找classpath下的application.propertiescom.rumenz.level,找到就返回,找不到就報錯,項目啟動失敗。

命令行參數配置

springboot的application.properties中可以配置一些參數,如端口號,賬號,密碼。如果我們想在運行的時候想臨時修改運行的端口也是可以的。

java -jar lession8-0.0.1-SNAPSHOT.jar --server.port=9000

這樣項目運行的端口就變成了9000,--server.port=9000相當於在application.properties中配置server.port=9000

系統環境變量

我們也可以在操作系統里面定義變量,然后通過@Value注入到Spring容器中。

package com.rumenz.lession8.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @className: RumenzController
 * @description: TODO 類描述
 * @author: 入門小站 rumenz.com
 * @date: 2021/11/8
 **/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {

    //讀取系統環境變量
    @Value("${PATH}")
    private String path;
    
    @RequestMapping("/index2")
    @ResponseBody
    public String index2(){
        return path;
    }
    
}

瀏覽器訪問http://127.0.0.1:8080/rumenz/index2,返回/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/share/dotnet:~/.dotnet/tools:/usr/local/mysql/bin:/usr/local/mysql/bin

系統屬性

我們可以設置VM arguments向Spring容器傳遞參數值。

Idea中設置VM arguments

image-20211109215812644

image-20211109215845066

測試

package com.rumenz.lession8.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @className: RumenzController
 * @description: TODO 類描述
 * @author: 入門小站 rumenz.com
 * @date: 2021/11/8
 **/
@Controller
@RequestMapping("/rumenz")
public class RumenzController {


    @Value("${spring.test.env}")
    private String springTestEnv;

    @RequestMapping("/index3")
    @ResponseBody
    public String index3(){
        return springTestEnv;
    }

}

瀏覽器訪問http://127.0.0.1:8080/rumenz/index3,返回test

jar包運行設置VM arguments

java -jar -Dspring.test.env=testvm lession8-0.0.1-SNAPSHOT.jar

瀏覽器訪問http://127.0.0.1:8080/rumenz/index3,返回testvm

本小結源碼地址:

  • 關注【入門小站】回復【1001】獲取 linux常用命令速查手冊
  • 關注【入門小站】回復【1003】獲取 LeetCode題解【java語言實現】
  • 關注【入門小站】回復【1004】獲取 Java基礎核心總結
  • 關注【入門小站】回復【1009】獲取 阿里巴巴Java開發手冊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM