springboot心得筆記-常用配置
一。 開發工具
springboot包含了一些開發工具集 只需要引用 spring-boot-devtools 依賴 開發工具在開發階段預設開啟 在被打包的程式 比如jar包 通過 java -jar執行
自動禁用 開發工具集
在spring.properties新增啟動配置 (添加了maven依賴 該引數預設為true 如果想禁用 改成false)<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
spring.devtools.restart.enabled=true
springboot可以定製哪些資源會自動重啟 哪些資源不會自動重啟 (靜態資源如圖片等)
spring-boot-devtools-1.5.7.RELEASE.jar下DevToolsSettings中定義了開發工具的邏輯
具體參考https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#using-boot-devtoolspublic static final String SETTINGS_RESOURCE_LOCATION = "META-INF/spring-devtools.properties";
二。 自定義Banner
springboot預設啟動時 輸出的圖示就是banner 比如
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.7.RELEASE)
spring提供了自定義banner的方式在 src/main/resources新增檔案banner.txt 新增特殊的自定義符號 在該txt中可以使用資原始檔的一些特殊資訊
參考(https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-banner)
比如我的banner.txt為
╭⌒╮¤ ` ${application.version}
╭╭ ⌒╮ ●╭○╮ ${spring-boot.version}
╰ ----╯/█∨█\
~~~~~~~~~~∏~~∏~~~~~~~~~~~
執行後顯示的效果為
17:08:42.628 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : []
17:08:42.644 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/.*.txt, /spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/]
17:08:42.644 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/C:/Users/jiaozi/Documents/workspace-sts-3.9.0.RELEASE/sb/target/classes/, file:/C:/Users/jiaozi/Documents/workspace-sts-3.9.0.RELEASE/sbbean/target/classes/]
╭⌒╮¤ ` 1290
╭╭ ⌒╮ ●╭○╮ 1.5.7.RELEASE
╰ ----╯/█∨█\
~~~~~~~~~~∏~~∏~~~~~~~~~~~
三。隨機值
springboot可以在properties檔案中使用表示式產生一些隨機值 比如
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
具體參考https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-external-config-random-values四。 Profiles
springboot允許使用 profile來定義不同環境下的不同配置 比如在開發環境下 使用mysql 正式環境下用oracle 如果直接修改配置 非常麻煩
可以在程式中預設好mysql和oracle的環境 通過不同的標誌來標誌 當啟動程式 傳入哪個標識就載入哪個配置 這就是profiles
以下舉例 假設有個介面是Db 有兩個實現類 Mysql和Oracle 分別給新增兩個配置類 定義不同的profile
新增介面和實現類
package cn.et.profile;
/**
* 定義介面
* @author jiaozi
*
*/
public interface Db {
String getName();
}
/**
* 定義mysql實現類
* @author jiaozi
*
*/
class Mysql implements Db{
@Override
public String getName() {
return "mysql";
}
}
/**
* 定義oracle實現類
* @author jiaozi
*
*/
class Oracle implements Db{
@Override
public String getName() {
return "oracle";
}
}
分別定義兩個profile分別是開發環境(例項化mysql的bean)和生產環境(例項化oracle的bean)
開發環境profile定義
package cn.et.profile;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile(value="dev")
@Configuration
public class DataSourceBeanDev {
@Bean
public Db testBean() {
return new Mysql();
}
}
生產環境profile定義
package cn.et.profile;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile(value="product")
@Configuration
public class DataSourceBeanProduct {
@Bean
public Db testBean() {
return new Oracle();
}
}
新增一個控制層的rest類
package cn.et.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import cn.et.profile.Db;
@RestController
public class TestController {
@Autowired
private Db db;
@GetMapping("/q")
public String query() {
return db.toString()+"=="+db.getClass().getTypeName();
}
}
新增main方法
package cn.et;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
@SpringBootApplication
public class SbApplication {
public static void main(String[] args) {
SpringApplication sa=new SpringApplication();
sa.run(SbApplication.class, args);
}
}
application.properties 添加當前啟動啟用的profile
spring.profiles.active=product
啟動後訪問 http://localhost:8080/q 頁面輸出的是Oracle的例項
修改spring.profiles.active=dev 頁面輸出的Mysql的例項
打包的程式 可以通過 java -jar a.jar --spring.profiles.active=product 來傳遞引數覆蓋spring.properties引數
springboot還可以新增一些額外的啟動profile
spring.profiles: dev #激動dev
spring.profiles.include:#同時啟用以下所有
- devredis
- devdb
- devmongodb
springboot yaml中可以將yaml中分成多個快 每個快指定 一個profile 參考springboot的 24.4 Profile-specific properties章節以及24.6.3 Multi-profile YAML documents
比如
server: address: 192.168.1.100 --- spring: profiles: development server: address: 127.0.0.1 --- spring: profiles: production server: address: 192.168.1.120
如果active的profile是development server的ip地址就是 127.0.0.1 如果是 production ip就是192.168.1.20 如果都沒有指定就是192.168.1.100
五。 日誌配置
springboot預設使用common-logging進行日誌記錄 日誌分為以下幾個級別
FATAL 錯誤可能導致程式崩潰
ERROR 一般為異常 程式繼續執行
WARN 警告資訊 非錯誤
INFO 程式正常執行記錄資訊
DEBUG 除錯資訊
TRACE 跟蹤資訊 級別最低
一般設定為 某個級別 大於該級別之上所有級別日誌都輸出 級別從低到高依次為:
FATAL-DEBUG-INFO-WARN-ERROR -FATAL
springboot預設的級別是INFO
通過在spring.properties中 設定debug=true設定級別為debug trace=true設定級別為trace
其他的級別通過以下配置設定
logging.level.root=ERROR
可以將日誌定位輸出到檔案 (以下兩個配置只能一個生效 都配置了 file生效)
logging.path=d:/logs #在該目錄下生成 spring.log日誌檔案
logging.file=my.log #當前專案下 生成該檔案
其他的日誌配置參考https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#boot-features-logging