第一篇-基础-第四章-配置SpringBoot项目
4.1-SpringBoot项目的配置文件
项目默认的配置文件为/src/main/resources/application.properties
涉及系统核心配置信息都可保存在此文件中,比如端口号,mysql相关信息,第三方相关信息等。
4.1.1 配置文件的格式
- 1,properties格式
典型的键值对文本形式,k=v,如果存在层级,a.b.c.k=v,使用#来进行注释说明
- 2,yml格式
yml是YAML的缩写,它是一种可读性高的用于表达数据序列化的文本格式,也是用键值对来进行数据匹配k: v
如果出现多层键值对,则必须分行处理,但相同父级层级可以共用
key1:
key2:
name: Mr_Sun_01
age: 18
key3:
name: Mr_Sun_00
age: 18
两种格式没有优劣性,习惯就行(二次开发照着原来的写皆可),应避免同时出现2个格式的配置文件,否则yml格式的会被忽略掉(毕竟properties是ide创建项目自带的原配)
4.1.2 达成约定的配置信息
#端口号
server.port=8088
#配置context-path
server.servlet.context-path=/
#错误页地址
server.error.path=/error
#session超时时间(分钟),默认为30分钟
server.servlet.session.timeout=60
#服务器绑定的IP地址,如果本机地址不在此ip地址则启动失败
server.address=127.0.0.1
#Tomcat最大线程数,默认为200
server.tomcat.threads.max=100
#Tomcat的URI字符编码
server.tomcat.uri-encoding=utf-8
4.2-读取配置信息的值
4.2.1使用@Value注解读取值
1,单级
@Value("${key}")
String value;
2,多层级
@Value("${key1.key2.key3}")
String value;
使用@Value读取配置信息时一定要确保配置信息存在,否在项目运行不起来
4.2.2使用Environment环境组件读取值
Environment不是注解,只是系统提供的一个环境组件接口,也就是一个不普通的类,它比@Value更加灵活,获取配置信息时,如果不存在,可以设置默认值,不填默认值时会获取得到null值。
@AutoWired
Environment env;
env.containsProperty(key) 是否存在此key
env.getProperty(key) 获取配置信息key对应的value,不存在则为null
env.getProperty(key , default_value ) 获取配置信息key对应的value,不存在则返回默认值
env.getProperty(key , Class<T> targetType , default_value) 确定返回的信息的类型,默认返回的是字符串
4.2.3使用映射类的对象读取值(@ConfigurationProperties)
将具有相同层级的配置信息构建出一个配置类,使用@ConfigurationProperities注解此配置类
可以将映射类注册为组件
1,配置类中信息
student.info.name=lilei
student.info.age=13
student.info.address=guangdong_shenzhen
#配置中可以有数组/List
#student.info.score[0]=100
#student.info.score[1]=120
#配置中可以有hashmap,与数组相似,所以hashmap应避免使用整型作为key
#student.info.book[b1]=Math
#student.info.book[b2]=Chinese
2,创建配置信息类
@Component //组件类声明
@ConfigurationProperties(prefix = "student.info") //配置类映射声明,同时确定前缀
public class StudentInfo {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "StudentInfo{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
3,映射类注册为组件,注入配置类即可完成配置信息读取
@Autowired
StudentInfo info;
@RequestMapping("/hello")
public String sayHello() {
return "hello " + info.toString();
}
可以将映射类的对象注册为Bean
1,此时的映射类不需要任何的注解
public class StudentInfo {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "StudentInfo{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
2,将映射类注册为Bean
@Bean
@ConfigurationProperties(prefix = "student.info")
public StudentInfo studentInfo(){
return new StudentInfo();
}
3,注入Bean完全配置类读取
@Autowired
StudentInfo info;
@RequestMapping("/hello")
public String sayHello() {
return "hello " + info.toString();
}
注册为Bean有个好处是进行别名管理,并且统一管理所有的配置信息的映射类的对象。
注意注意:2种方式不能同时使用,否则会出现2个相同的Bean,导致无法识别。
4.3-SpringBoot支持多配置文件
SpringBoot支持多配置文件,从而实现在不同的部署环境读取不同的配置信息。
4.3.1加载多个配置文件
创建项目时,SpringBoot会在src/main/resources下自动创建配置文件application.properties,主要用于保存核心配置信息。你也可以根据项目需要创建单独的配置文件,
同时,用@PropertySource注解加载配置文件,注解标注在SpringBoot的启动类上。
1,在src/main/resources目录下新建myconfig.properties文件,写入配置信息
new_name=Lily
2,在启动类加载此配置文件
@SpringBootApplication
@PropertySource(value = "classpath:myconfig.properties")//多个配置文件就用{}括起来
public class Test01Application {
public static void main(String[] args) {
SpringApplication.run(Test01Application.class, args);
}
}
3,正常引入此配置即可(这里使用Environment)
env.getProperty("new_name")
注意注意: src/main/resources目录在SpringBoot中的抽象路径为classpath
如果自定义配置文件src/main/resources目录下的子目录config下,则加载的路径如下:
@PropertySource("classpath:config/myconfig.properties")
4.3.2切换不同版本的配置文件
SpringBoot支持切换不同版本的配置文件,在application.properties文件中填写spring.profiles.active配置信息后,即可允许程序除了加载application.properties配置文件外,还会加载不同版本的配置文件。
spring.profiles.active=suffix1,suffix2,suffix3
每一个值表示一个后缀,每个后缀都表示一个名为application-{suffix}.properties的配置文件。
4.4-使用@Configuration注解声明配置类
除了读取编写自己写的配置信息,还可以读取项目启动自动生成的配置信息Bean,也可以通过配置类重写这些Bean,此时需要用到@Configuration注解。
被@Configuration标注过的配置类在SpringBoot启动时就会被加载启动。
以接口错误页面为例子
一旦接口调用错误,出现的是默认的404页面提示
我们可以重写SpringBoot自动创建的Bean,让提示更加友好一些。
1,写一个配置类,重新相应的处理方法
@Configuration
public class ErrorPageConfig {
//系统原先会自动生成一个Bean来响应400或者500的错误,现在在配置类中重写此方法,重新定义跳转路径
@Bean
public ErrorPageRegistrar getErrorPageRegister() {
return new ErrorPageRegistrar() {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
//出现400的错误,跳到/404去
ErrorPage error404 = new ErrorPage(HttpStatus.NOT_FOUND, "/404");
//出现500的错误,跳到/500地址去
ErrorPage error500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500");
registry.addErrorPages(error404,error500);//登基错误页
}
};
}
}
2,在控制器类中重写友好页面信息
@RequestMapping("/404")
public String hello404() {
return "我是自定义的404出错页面";
}
@RequestMapping("/500")
public String hello500() {
return "我是自定义的500出错页面";
}
3,输入错误的接口地址,就可以返回友好的错误返回信息
打完收工。
原文地址:https://blog.csdn.net/sunguanyong/article/details/142468861
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!