1. 程式人生 > >springboot心得筆記-常用配置

springboot心得筆記-常用配置

一。 開發工具

   springboot包含了一些開發工具集 只需要引用 spring-boot-devtools 依賴 開發工具在開發階段預設開啟 在被打包的程式 比如jar包 通過 java -jar執行

自動禁用 開發工具集

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
在spring.properties新增啟動配置 (添加了maven依賴 該引數預設為true  如果想禁用 改成false)
spring.devtools.restart.enabled=true

springboot可以定製哪些資源會自動重啟 哪些資源不會自動重啟 (靜態資源如圖片等)

spring-boot-devtools-1.5.7.RELEASE.jar下DevToolsSettings中定義了開發工具的邏輯

public static final String SETTINGS_RESOURCE_LOCATION = "META-INF/spring-devtools.properties";
具體參考https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/htmlsingle/#using-boot-devtools

二。 自定義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