SpringBoot系列: Java應用程序傳參和SpringBoot參數文件



===========================
向java 程序傳參的幾種形式:
===========================
1. 使用 OS 環境變量.
這個不推薦.
2. 使用JVM變量, 最常用的是 -D 參數. -XX 和-X 參數是用來設定內存和GC參數, 不同JVM的參數設置可能不同.
-D 和 -X 參數緊跟在 java 后面.
java -Dfile.encoding=UTF-8 -jar abc.jar
java -Dkey=value1 -jar abc.jar
在java 程序中, 可以通過下面的方式獲取-D的參數:
String value = System.getProperty("key", "defaultvalue");
3. 通過設定 JAVA_OPTS 或 JAVA_TOOL_OPTIONS 這兩個操作系統的環境變量傳參.
我們還可以通過設定 JAVA_OPTS OS 環境變量的方式, 新啟動JVM將會自動讀取這兩個OS環境變量.
JAVA_OPTS="-Djava.library.path=/export/home/actuate7/bin -Xms256m -Xmx512m"
java -jar abc.jar
4. 使用應用程序自己的參數.
java -jar abc.jar --argument2=value2
java -jar abc.jar --server.port=9000

特別說明:
1. [推薦] 可以通過 --參數 方法, 設定SpringBoot的參數, 比如:
java -jar abc.jar --server.port=9000
java -jar abc.jar --spring.profiles.active=prod
2. 可以通過 -D參數或 JAVA_OPTS/JAVA_TOOL_OPTIONS 操作環境變量, 設定SpringBoot參數, 比如:
java -Dserver.port=9000 -jar abc.jar
--spring.profiles.active=prod


===========================
SpringBoot 參數文件相關的幾個參數
===========================

-------------------
spring.config.name 參數
-------------------
spring.config.name 參數指定參數文件名, 不能加路徑和文件擴展名.
spring.config.name 參數缺省取值是 application,
$ java -jar myproject.jar --spring.config.name=myproject
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties


-------------------
spring.config.location 參數
-------------------
spring.config.location 參數既可傳入目錄, 也可以傳入具體文件名, 甚至可以傳入多個目錄或文件(以逗號分割).
如果參數是目錄的話, 目錄應以 / 結尾, spring 將在指定的目錄中查找 spring.config.name 對應的文件.
$ java -jar myproject.jar --spring.config.location=your/config/dir/
$ java -jar myproject.jar --spring.config.location=classpath:job1.properties,classpath:job2.properties

spring.config.location 參數如果缺省, SpringBoot將從下面四個路徑搜索參數文件, 搜索的順序是:
file:./config/ 索索jar程序所在目錄的config 子目錄
file:./ 搜索與 jar 程序的同目錄下的配置文件
classpath:/config/ 搜索jar 包內部 classes/config 目錄下的配置文件
classpath:/ 搜索jar 包內部 classes 目錄下的配置文件
需要說明的是: 一旦指定了spring.config.location 參數, SpringBoot將不再搜索上面4個目錄.

-------------------
spring.config.additional-location 參數
-------------------
上面已經提及, 一旦指定了spring.config.location 參數, SpringBoot將僅僅搜索參數設定的目錄, 但如果指定的是spring.config.additional-location 參數, SpringBoot先搜索參數設定目錄, 然后再搜索上面4個目錄.

 

特別說明:
1. 一旦指定了spring.config.location 參數, SpringBoot將不再搜索上面4個目錄.
2. 即使是在一個目錄中找到了參數文件, SpringBoot仍會其他目錄中搜索並加載參數文件. SpringBoot是按照參數項級做override, 而不是參數文件級的override.
3. 如果spring.config.location 參數指定的是文件, SpringBoot將不會加載profile-specific變體文件, 如果spring.config.location 參數指定的是目錄, SpringBoot仍會搜索並加載profile-specific變體文件.
4. 開發的時候我們通常會將application.properties放到 /src/main/resources/ 下, 在打包成executable war/jar后, 該參數文件會被自動轉移到classpath:/ 下, 所以該文件會搜索並加載的.
5. application.properties 屬性不能是中文, springBoot 是以 iso-8859編碼來讀取的, 如果屬性值一定要有中文, 可以放到application.yml 文件中.
6. SpringBoot參數解析器非常智能, 不管參數名是按照駝峰寫法, 還是按照下划線寫法, 還是按照連接符寫法, 都能自動和Bean中的屬性關聯起來. 即參數中 server.servlet.contextPath 和 server.servlet.context_path 和 server.servlet.context-path 寫法其實都是等價的.

===========================
參數文件內的變量 placeholder
===========================
application.properties的變量placeholder
app.name=MyApp
app.description=${app.name} is a Spring Boot application


===========================
參數文件的 profile 參數
===========================
# 以下是 application.properties 文件內容.
# 其中 spring.profiles.active 參數或是寫死, 或是通過命令行傳入.
spring.profiles.active=dev
spring.profiles.default=default
environments.dev.url=http://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=http://another.example.com
environments.prod.name=My Cool App


===========================
針對不同環境的 profile 參數文件
===========================
不同profile的參數文件命名規范是 application-{profile}.properties.
不管指定了什么樣的環境profile, SpringBoot 總是先加載 application.properties, 然后再加載指定的profile參數文件, 如果沒有找到指定的profile參數文件, 還可以加載一個default參數文件.
# 以下是 application.properties 文件內容.
# 其中 spring.profiles.active 參數或是寫死, 或是通過命令行傳入.
spring.profiles.active=dev
spring.profiles.default=default

# 以下是 application-prod.properties 文件內容
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=root
spring.datasource.password=root

# 以下是 application-dev.properties 文件內容
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa


免責聲明!

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



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