# [Spring Boot] application.properties (待整理) ###### tags: `Spring` `Java` `Spring Boot` [TOC] ## :triangular_flag_on_post: application.properties 在 Spring Boot 預設的載入順序 1. jar包所在目錄同級的目錄 `/config` 的子目錄下 2. jar包鎖在目錄的同級目錄下 3. classpath根目錄的 `/config` 包下 4. classpath的根目錄下 資料參考: [SpringBoot配置文件——加载顺序](https://www.feilewu.cn/#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%89%80%E5%9C%A8%E7%9B%AE%E5%BD%95) ## 常用設定 * `server.port` 埠號 (預設`8080`) * `server.error.path` 錯誤時跳轉的頁面 * `server.servlet.session.timeout` session 過期/失效的時間,如: 30m 表示 30 分鐘 (預設為秒) (注意:由於 Tomcat 中配置 session 過期時間是以分鐘為單位,如果自行設定是秒的話,會自動轉換為一個不超過所配置秒數的最大分鐘數。如: 設定 119 秒,實際為 1 分鐘) * `server.servlet.context-path` 訪問路徑 (預設`/`) * `server.tomcat.uri-encoding` Tomcat 編碼 * `server.tomcat.max-threads` 執行緒最大數量 * `server.tomcat.basedir` Tomcat 運行日誌和臨時文件的路徑 [SpringBoot - 内置的Tomcat服务器配置详解(附:启用HTTPS服务)](https://www.hangge.com/blog/cache/detail_2457.html) ## 使用 yaml 代替 properties - properties ```=properties #properties spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8 spring.datasource.username=winnie spring.datasource.password=winniegood my.servers[0]=www.test.com my.servers[1]=www.test2.com my.name=winnie ``` - yml ```=yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8 username: winnie password: winniegood my: server: - www.test.com - www.test2.com name: winnie ``` ## 使用 @Value 注入配置檔的值 ```=Java @Value("${my.name}") private String name; ``` (https://www.gushiciku.cn/pl/pSJw/zh-tw) ## Spring Data JPA 配置多個 DataSource (待整理) ### 當有多個 Properties 配置的執行優先順序 (待整理) 1. 程式啟動參數 ```=cmd $ java Application --server.port=80 $ java -jar Application.jar --server.port=80 ``` 在啟動Java程式的時候直接指定帶入的參數,這個參數會先傳到Java的程式進入點 `main(String[] args)`,然後再傳到`SpringApplication.run`,如下所示。目前測試起來寫在這裡的設定的優先度最高,會覆蓋之後所有設定。 ```=java public static void main(String[] args) { SpringApplication.run(Application.class, args); } ``` 2. 透過System設定 ``` public static void main(String[] args) { System.setProperty("server.port", "80") SpringApplication.run(Application.class, args); } ``` 3. 透過JVM環境變數指定 ```=cmd java -Dserver.port=80 Application java -Dserver.port=80 -jar Application.jar ``` 在啟動java的時候透過-D參數指定的數值,在java中可以透過System.getProperty(name)獲取,其實跟第二優先的方法是一樣的。但是在程式內指定的property會覆蓋-D設定的參數,因此優先級較低。 4. 指定環境的application-xxx.properties ```=properties server.port= 80 # properties寫法 server.port: 80 # yml寫法 ``` 例如:`application-prod.properties`、`application-test.properties` 等 5. application.properties ```=properties server.port= 80 # properties寫法 server.port: 80 # yml寫法 ``` 寫在application.properties或是application.yml裡面的設定,設定的優先序是最低的,目前測起來其他每個設定方式都會覆蓋此設定。 [Spring Boot + Spring Data JPA 配置多個 DataSource](https://www.tpisoftware.com/tpu/articleDetails/2637) [實測Spring Boot中多個Properties設定的覆蓋順序](https://klab.tw/2022/05/spring-boot-properties-priority/) [SpringBoot加载多个配置文件实现dev、product多环境切换](https://blog.csdn.net/lans_g/article/details/129782589)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up