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