1. 程式人生 > >快速開發框架SpringBoot-學習日記(二)

快速開發框架SpringBoot-學習日記(二)

第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;
}