第一篇-基础-第四章-配置SpringBoot项目

embedded/2024/9/24 14:46:08/

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_01age: 18key3:name: Mr_Sun_00age: 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]=Chinese2,创建配置信息类
@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;}@Overridepublic 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;}@Overridepublic 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=Lily2,在启动类加载此配置文件
@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的错误,现在在配置类中重写此方法,重新定义跳转路径@Beanpublic ErrorPageRegistrar getErrorPageRegister() {return new ErrorPageRegistrar() {@Overridepublic 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,输入错误的接口地址,就可以返回友好的错误返回信息

打完收工。


http://www.ppmy.cn/embedded/116135.html

相关文章

基于VUE的教师教学质量网络评测评价统计分析系统

1、 选题的背景与意义 21世纪是信息化的世纪&#xff0c;我们的一些生活习惯因为计算机而发生改变&#xff0c;我们也逐渐习惯于通过计算机的各项功能来获得便利。这其中所带来的挑战和机遇为各行业的发展指明了一个方向。教学质量评测是一项琐碎而又十分细致的工作&#xf…

【Python报错已解决】NameError: name ‘F‘ is not defined

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【软件文档资料】软件代码编写规范-交付文档支撑(Word原件)

&#xff08;一&#xff09;一开始就必须正确的使用规范 &#xff08;二&#xff09;简易性原则 &#xff08;三&#xff09;清晰性原则 &#xff08;四&#xff09;健壮性原则 &#xff08;五&#xff09;效率原则 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&am…

Ansys Zemax | OpticStudio如何计算光瞳偏移

附件下载 联系工作人员获取附件 概述 这篇文章介绍了什么是光瞳偏移 (Pupil Shift) 以及“自动计算光瞳偏移 (Automatic Calculation of Pupil Shifts)”功能是如何进行计算的。 什么是光瞳偏移 光线瞄准算法是一个非常强大的功能&#xff0c;它可以在系统存在较大光瞳像差…

【Python】快速判断两个commit 是否存在cherry-pick 关系

判断两个提交是否有 cherry-pick 关系的 Python 脚本&#xff0c;可以基于以下三种常见情况进行优化&#xff1a; Commit Hash 一致&#xff1a;如果两个提交的 hash 完全相同&#xff0c;那么它们是相同的提交。 Commit Title 存在关联&#xff1a;如果两个提交的 commit mes…

2024全球科技品牌价值榜50强:苹果第一

根据《Brand Finance 2024年全球最具价值科技品牌榜单报告》&#xff0c;中国品牌在社交媒体、电子和电器行业表现卓越。 全球排名前三的是&#xff1a;苹果、微软以及 Google。国内前几的是&#xff1a;抖音、微信和华为&#xff0c;分为位于第五、十一、十五位。 英伟达在人工…

英特尔®以太网网络适配器E810-CQDA1 / E810-CQDA2 网卡 规格书 e810 网卡 规格书 Intel100G E810 网卡 白皮书

英特尔以太网800系列网络适配器 英特尔以太网网络适配器E810-CQDA1 / CQDA2 在10到100Gbps的以太网速度下实现高效的工作负载优化性能 关键特性 •单、双端口QSFP28 •应用设备队列(ADQ) •PCI Express (PCIe) 4.0 x16 •动态设备个性化(DDP) •以太网端口配置工具(EPC…

npm install报错npm ERR Could not resolve dependency: npm ERR peer... 依赖冲突

报错原因 在新版本的npm中&#xff0c;默认情况下&#xff0c;npm install遇到冲突的peerDependencies时将失败。 解决办法 使用--force或--legacy-peer-deps可解决这种情况。 --force 会无视冲突&#xff0c;并强制获取远端npm库资源&#xff0c;当有资源冲突时覆盖掉原先的…