快速開發框架SpringBoot-學習日記(二)
阿新 • • 發佈:2018-11-27
第2章 Spring Boot重要用法
自定義異常頁面
- 在resources目錄中新建***public/error***目錄
- 在resources/public/error目錄新建自定義異常頁面,要求檔名稱必須為對應的狀態碼,副檔名為html
多環境選擇
總步驟
- 定義多個子配置檔案 或 在application.yml中定義多個環境配置
- 在application.yml中進行多環境選擇
- 在介面實現類上通過@Profile進行多環境選擇
實現步驟
定義配置檔案
- 定義application-dev.yml
# 開發環境
server:
port: 8888
servlet:
context-path: /ddd
- 定義application-pro.yml
# 生產環境
server:
port: 9999
servlet:
context-path: /ppp
- 定義application.yml
# 選擇要執行的環境
spring:
profiles:
active: dev # 這裡選擇的是dev環境
定義業務介面
public interface SomeService { String send(); }
定義兩個介面實現類
@Service
@Profile("dev") // 表示當前類是在dev環境下執行的
public class DevelopServiceImpl implements SomeService {
@Override
public String send() {
return "開發環境dev";
}
}
@Service @Profile("pro") // 表示當前類是在pro環境下執行的 public class ProductServiceImpl implements SomeService { @Override public String send() { return "生產環境pro"; } }
定義處理器
@RestController
public class SomeController {
@Autowired
private SomeService service;
@RequestMapping("/some")
public String someHandle() {
return service.send();
}
}
啟動執行
- 可以在Idea下直接執行,若要切換環境,可直接修改配置檔案
- 也可以打包後直接在命令列執行。若要切換環境,可在命令列新增引數
java -jar 03-multienv.jar --spring.profiles.active=dev
可以將所有配置放入一個配置檔案
說明:此時僅需一個application.yml檔案即可,無需其它子配置檔案
# 選擇要執行的環境
spring:
profiles:
# active: dev # 這裡選擇的是dev環境
active: pro # 這裡選擇的是pro環境
---
# 開發環境
spring:
profiles: dev # 指定當前環境名稱為dev
server:
port: 8888
servlet:
context-path: /ddd
---
# 生產環境
spring:
profiles: pro # 指定當前環境名稱為pro
server:
port: 9999
servlet:
context-path: /ppp
讀取自定義配置
讀取主配置檔案中的屬性
通過@Value("${屬性名}")可以讀取application.yml檔案中指定的屬性的值
讀取指定配置檔案中的屬性
通過@PropertySource(value="classpath:custom.properties", encoding = "utf-8")
指定配置檔案
注意,這裡指定的自定義配置檔案只能是properties檔案,不能是yml檔案。這個在spring官網有說明
YAML files cannot be loaded by using the @PropertySource annotation. So, in the case that you need to load values that way, you need to use a properties file.
讀取物件屬性
- 需要新增依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 需要定義與物件屬性相對應的類
@Data
@Component
@PropertySource(value="classpath:custom.properties", encoding = "utf-8")
@ConfigurationProperties("student")
public class Student {
private String name;
private int age;
private double score;
private List<String> cities;
}