1. 程式人生 > 其它 >洛谷 P5527 - [Ynoi2012] NOIP2016 人生巔峰(抽屜原理+bitset 優化揹包)

洛谷 P5527 - [Ynoi2012] NOIP2016 人生巔峰(抽屜原理+bitset 優化揹包)

JSR303資料校驗

先看看如何使用

SpringBoot中可以用@Validated來校驗資料,如果資料異常則會統一丟擲異常,方便異常中心統一處理。我們這裡來寫個註解讓我們的name只能支援Email格式;

@Component //註冊bean
@ConfigurationProperties(prefix = "person")
@Validated  //資料校驗
public class Person {

    @Email(message="郵箱格式錯誤") //name必須是郵箱格式
    private String name;
}

如果@Email註解爆紅,新增依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

執行結果 :default message [不是一個合法的電子郵件地址];

使用資料校驗,可以保證資料的正確性;

常見引數

@NotNull(message="名字不能為空")
private String userName;
@Max(value=120,message="年齡最大不能查過120")
private int age;
@Email(message="郵箱格式錯誤")
private String email;

空檢查
@Null       驗證物件是否為null
@NotNull    驗證物件是否不為null, 無法查檢長度為0的字串
@NotBlank   檢查約束字串是不是Null還有被Trim的長度是否大於0,只對字串,且會去掉前後空格.
@NotEmpty   檢查約束元素是否為NULL或者是EMPTY.
    
Booelan檢查
@AssertTrue     驗證 Boolean 物件是否為 true  
@AssertFalse    驗證 Boolean 物件是否為 false  
    
長度檢查
@Size(min=, max=) 驗證物件(Array,Collection,Map,String)長度是否在給定的範圍之內  
@Length(min=, max=) string is between min and max included.

日期檢查
@Past       驗證 Date 和 Calendar 物件是否在當前時間之前  
@Future     驗證 Date 和 Calendar 物件是否在當前時間之後  
@Pattern    驗證 String 物件是否符合正則表示式的規則

.......等等
除此以外,我們還可以自定義一些資料校驗規則

多環境切換

profile是Spring對不同環境提供不同配置功能的支援,可以通過啟用不同的環境版本,實現快速切換環境;

多配置檔案

我們在主配置檔案編寫的時候,檔名可以是 application-{profile}.properties/yml,用來指定多個環境版本;

例如:

application-test.properties 代表測試環境配置

application-dev.properties 代表開發環境配置

但是SpringBoot並不會直接啟動這些配置檔案,它預設使用application.properties主配置檔案;

我們需要通過一個配置來選擇需要啟用的環境:

#比如在配置檔案中指定使用dev環境,我們可以通過設定不同的埠號進行測試;
#我們啟動SpringBoot,就可以看到已經切換到dev下的配置了;
spring.profiles.active=dev

yaml的多文件塊

和properties配置檔案中一樣,但是使用yml去實現不需要建立多個配置檔案,更加方便了

server:
  port: 8081
#選擇要啟用那個環境塊
spring:
  profiles:
    active: dev

---
server:
  port: 8082
spring:
  profiles: dev #配置環境的名稱


---
server:
  port: 8083
spring:
  profiles: prod  #配置環境的名稱

springboot 2.4版本往後,不推薦使用:

spring:
  profiles: dev #配置環境的名稱

替代方式:

spring:
  config:
    activate:
      on-profile: dev #配置環境的名稱

具體示例:

server:
  port: 8081
spring:
  profiles:
    active: dev
---
server:
  port: 8082
spring:
  config:
    activate:
      on-profile: dev
---
server:
  port: 8083
spring:
  config:
    activate:
      on-profile: test

注意:如果yml和properties同時都配置了埠,並且沒有啟用其他環境 , 預設會使用properties配置檔案的!

配置檔案載入位置

外部載入配置檔案的方式十分多,我們選擇最常用的即可,在開發的資原始檔中進行配置!

官方外部配置檔案說明參考文件:https://docs.spring.io/spring-boot/docs/2.1.10.RELEASE/reference/htmlsingle/

springboot 啟動會掃描以下位置的application.properties或者application.yml檔案作為Spring boot的預設配置檔案:

優先順序1:專案路徑下的config資料夾配置檔案
優先順序2:專案路徑下配置檔案
優先順序3:資源路徑下的config資料夾配置檔案
優先順序4:資源路徑下配置檔案

優先順序由高到低,高優先順序的配置會覆蓋低優先順序的配置;優先順序1是最高;

SpringBoot會從這四個位置全部載入主配置檔案;互補配置;

我們在最低階的配置檔案中設定一個專案訪問路徑的配置來測試互補問題;

#配置專案的訪問路徑
server.servlet.context-path=/edgar

拓展,運維小技巧

指定位置載入配置檔案

我們還可以通過spring.config.location來改變預設的配置檔案位置

專案打包好以後,我們可以使用命令列引數的形式,啟動專案的時候來指定配置檔案的新位置;這種情況,一般是後期運維做的多,相同配置,外部指定的配置檔案優先順序最高

java -jar spring-boot-config.jar --spring.config.location=F:/application.properties