什么是一学一做视频网站好,烟台网站seo外包,微信网页插件 wordpress,廊坊市建设局官方网站目录: Spring Boot的核心配置与注解 #xff1a;1. 全局配置文件 ( application.properties / application.yaml#xff1a;创建项目时候自动生成#xff0c;其会被“自动导入”到“程序”中 )application.properties配置文件application.yaml 配置文件 (推荐使用)当value值… 目录: Spring Boot的核心配置与注解 1. 全局配置文件 ( application.properties / application.yaml创建项目时候自动生成其会被“自动导入”到“程序”中 )application.properties配置文件application.yaml 配置文件 (推荐使用)当value值为 “普通数据类型” (如 : 数字、字符串、布尔等)当value值为 “数组” 或 “单列集合”当value值为 “Map集合” 或 “对象类型”application.yaml 配置文件的“应用案例” 2. “配置文件属性值” 的 “注入”使用ConfigurationProperties( )注解将“配置文件”中的“属性值”注入到“属性”中 (注入“个别属性值”)使用Value( )注解将“配置文件”中的“属性值”注入到“属性”中 (注入“个别属性值”)两种注解“对比分析”底层框架功能属性 setter 方法复杂类型属性注入松散绑定JSR303 数据校验SpEL表达式 ( 使用“SpEL表达式”为属性“直接注入值” ) 如何选择使用这“两种注解” Spring Boot的核心配置与注解 作者简介 一只大皮卡丘计算机专业学生正在努力学习、努力敲代码中! 让我们一起继续努力学习 该文章参考学习教材为 《Spring Boot企业级开发教程》 黑马程序员 / 编著 文章以课本知识点 代码为主线结合自己看书学习过程中的理解和感悟 最终成就了该文章 文章用于本人学习使用 同时希望能帮助大家。 欢迎大家点赞 收藏⭐ 关注哦 侵权可联系我进行删除如果雷同纯属巧合
1. 全局配置文件 ( application.properties / application.yaml创建项目时候自动生成其会被“自动导入”到“程序”中 ) 全局配置文件 ( applicationContext.properties )能够对一些 默认配置值进行修改。Spring Boot 使用一个 ① application.properties 或者 ② application.yaml 的文件作为 全局配置文件该文件存放 在 src/main/resource目录 或者 类路径的 /config一般会选择 resource目录。 application.properties配置文件 使用 Spring Initializr方式构建Spring Boot项目时会在 src/main/resources目录 下 自动生成一个空 application.properties文件 Spring Boot项目启动时会自动加载application.properties文件。 我们可以在application.properties 文件中定义 Spring Boot 项目的相关属性当然这些相关属性可以是 系统属性、环境变量 、命令参数等信息也可以是 自定义配置文件名称 和 位置。示例代码如下: spring.application.namechapter_02
server.address80
server.port8443
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.config.additional-location
spring.config.location
spring.config.nameapplication关于applicationContext.properties 的 案例 ( 例子如 ) : Pet.java : package com.myh.chapter_03.domain;public class Pet {private String type;private String name;public String getType() {return type;}public void setType(String type) {this.type type;}public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Pet{ type type \ , name name \ };}}Person.java package com.myh.chapter_03.domain;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;
import java.util.Map;Component //用于将Person类加入到IOC容器中 (只有这样Person对象才能被 ConfigurationProperties()注解赋值 )ConfigurationProperties(prefix person)//将配置文件(application.properties)中以person开头的数据通过“set方法”注入到该类中属性
public class Person {/*** 通过 ConfigurationProperties(prefix person) 注解来将 application.properties中的数据注入到* 下面的“属性”中*/private int id;private String name;private List hobby;private String[] family;private Map map;private Pet pet;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public List getHobby() {return hobby;}public void setHobby(List hobby) {this.hobby hobby;}public String[] getFamily() {return family;}public void setFamily(String[] family) {this.family family;}public Map getMap() {return map;}public void setMap(Map map) {this.map map;}public Pet getPet() {return pet;}public void setPet(Pet pet) {this.pet pet;}Overridepublic String toString() {return Person{ id id , name name \ , hobby hobby , family Arrays.toString(family) , map map , pet pet };}
}ConfigurationProperties(prefix “person”)注解 的 作用 是将配置文件中以person开头的属性值通过setter方法注入实体类对应属性 中。Component注解 的作用是将当前注入属性值的 Person类对象作为 Bean 组件放到 Spring 容器中只有 这样它才能被 ConfigurationProperties注解赋值。 在上述自定义 Person类中添加了一个 Component注解将该自定义类作为 Spring容器的组件 ( 简而言之就是 将该类交给IOC容器管理 )其根本目的是让 Spring Boot 可以自动扫描到该组件然后进行其他功能实现。 application.properties #对实体类对象Person进行属性配置
person.id 1
person.name tom
person.hobby play,read,sleep
person.family father,mother
person.map.k1 v1
person.map.k2 v2
person.pet.type dog
person.pet.name kitySpring Boot默认全局配置文件 : application.properties 中的数值将会通过 ConfigurationProperties( ) 注解 注入到对应 的 实体类 中。 pom.xml ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.1.3.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.myh/groupIdartifactIdchapter_03/artifactIdversion0.0.1-SNAPSHOT/versionnamechapter_03/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependencies!-- web应用场景依赖启动器 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 单元测试依赖启动器 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversionRELEASE/versionscopetest/scope/dependency!-- “热部署”依赖启动器 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactId/dependency!-- 是生成配置元数据以提供更好的配置文件支持和开发体验。它能够帮助开发人员更方便地使用配置文件并提高开发效率 --!--在编写application.properties配置文件时由于要配置的Person 对象属性是我们自定义的SpringBoot 无法自动识别所以不会有任何书写提示。在实际开发中为了出现代码提示的效果来方便配置在使用ConfigurationProperties注解进行配置文件属性值注入时可以在pom.xmI文件中添加一个Spring Boot 提供的配置处理器依赖--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactId/dependency/dependencies!-- Maven打包工具插件 --
!-- build--
!-- plugins--
!-- plugin--
!-- groupIdorg.springframework.boot/groupId--
!-- artifactIdspring-boot-maven-plugin/artifactId--
!-- /plugin--
!-- /plugins--
!-- /build--/projectChapter03ApplicationTests.java ( 单元测试类 ) package com.myh.chapter_03;import com.myh.chapter_03.domain.Person;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;RunWith(SpringRunner.class) //测试运行器并加载SpringBoot测试注解
SpringBootTest //标记该类为“单元测试类”并加载项目的上下文环境ApplicationContext
class Chapter03ApplicationTests {Autowiredprivate Person person;Testvoid contextLoads() {System.out.println(person);}
}运行 contextLoads( )方法控制台输出结果如下图所示 方法执行结果.jpg)信息成功打印说明了 application.properties文件 属性配置正确并通过 相关注解自动完成 了 “属性注入”。 application.yaml 配置文件 (推荐使用) YAML文件格式 是 Spring Boot 支持 的一种 JSON 超集文件格式相较于传统的Properties配置文件YAML文件以数据为核心是一种更为 直观 且 容易被计算机识别 的 数据序列化格式。application.yaml 配置文件的 工作原理 和 application.properties 是一样的只不过YAML格式配置文件看起来 更简洁一些。application.yaml 文件用“ key: 空格 value”格式配置属性使用缩进控制层级关系。这里我们 针对不同数据类型 的 属性值介绍一下YAML文件配置属性的 写法具体如下所示 。 当value值为 “普通数据类型” (如 : 数字、字符串、布尔等) (1) value 值为 普通数据类型( 如数字、字符串、布尔等) 当 YAML 配置文件中配置的 属性值 为 普通数据类型 时可以 直接配置对应的属性值同时对 字符串类型的属性值不需要额外添加引号示例代码如下 #当属性值为普通数据类型(如:数字、字符串、布尔等),属性值不需要”额外添加引号“
#8081 和 /hello因为是普通数据类型,所以都没添加额外的引号
#port和path属于“同一级别”
Server:port: 8081path: /hello当value值为 “数组” 或 “单列集合” (2) value 值为 数组 或 单列集合 当YAML 配置文件中配置的 属性值 为 数组 或 单列集合类型 时主要有 两种书写方式 ①缩进式写法 和 ②行内式写法。 ①缩进式写法 : #缩进式写法
person1:hobby:- play- read- sleepperson2:hobby:play,read,sleep ②行内式写法 : #行内式写法
person4:hobby: [play,read,sleep]#使用行内式设置属性值时, []是可以省略的,程序会自动匹配校队属性的值
person5:hobby: play,read,sleep当value值为 “Map集合” 或 “对象类型” (3) value 值为 Map 集合 和 对象类型 时主要同样 有两种书写方式 ①缩进式写法 和 ②行内式写法。 ①缩进式写法 : #value值为Map或对象时的写法
#Map类型
#缩进式写法
person6:map:k1: v1k2: v2②行内式写法 : #Map类型
#行内式写法,此处用的符号是: 大括号{}
person7:map: {k1: v1,k2: k3}ps : 此处用的 符号 是: 大括号{ } application.yaml 配置文件的“应用案例” application.yaml : #对实体类对象Person进行属性设置, 一样是通过 ConfigurationProperties()注解来将下面的数据值注入到类的属性中的
person2:id: 1name: 张三hobby: [play,read,sleep]family: [father,mother]map: {k1: v1,k2: v2}pet: {type: dog,name: kitty}Person.java : package com.myh.chapter_03.domain;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;
import java.util.Map;Component //用于将Person类加入到IOC容器中 (只有这样Person对象才能被 ConfigurationProperties()注解赋值 )ConfigurationProperties(prefix person2)//将配置文件( application.yaml )中以person2开头的数据通过“set方法”注入到该类中属性
public class Person {/*** 通过 ConfigurationProperties(prefix person) 注解来将 application.properties中的数据注入到* 下面的“属性”中*/private int id;private String name;private List hobby;private String[] family;private Map map;private Pet pet;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public List getHobby() {return hobby;}public void setHobby(List hobby) {this.hobby hobby;}public String[] getFamily() {return family;}public void setFamily(String[] family) {this.family family;}public Map getMap() {return map;}public void setMap(Map map) {this.map map;}public Pet getPet() {return pet;}public void setPet(Pet pet) {this.pet pet;}Overridepublic String toString() {return Person{ id id , name name \ , hobby hobby , family Arrays.toString(family) , map map , pet pet };}
}Chapter03ApplicationTests.java ( 单元测试类 ) package com.myh.chapter_03;import com.myh.chapter_03.domain.Person;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;RunWith(SpringRunner.class) //测试运行器并加载SpringBoot测试注解
SpringBootTest //标记该类为“单元测试类”并加载项目的上下文环境ApplicationContext
class Chapter03ApplicationTests {Autowiredprivate Person person;Testvoid contextLoads() {System.out.println(person);}
}运行 contextLoads( )方法控制台输出结果如下图所示 信息成功打印说明了 application.yaml文件 属性配置正确并通过 相关注解自动完成了“属性注入”。 通过对比可以发现YAML配置文件的格式更加简洁、方便、推荐使用YAML格式文件。 2. “配置文件属性值” 的 “注入” 使用Spring Boo 全局配置文件 ( application.properties / application.yaml )配置 属性 时① 如果配置的属性是Spring Boot 默认提供的属性 例如服务器端口server.port那么Spring Boot内部会自动扫描并读取属性值 因为那是 默认提供的属性 。 ② 如果配置的属性是 用户自定义属性例如 自定义的 Person 实体类属性则必须在程序中注入这些配置属性 ( 通过 ConfigurationProperties( )注解 来 进行“属性值”的注入 )方可生效。 Spring Boot 支持 多种注入配置文件属性的方式 : ① 使用 注解ConfigurationProperties ( )注解“注入属性” ② 使用 Value( )注解 “注入属性” 使用ConfigurationProperties( )注解将“配置文件”中的“属性值”注入到“属性”中 (注入“个别属性值”) Spring Boot提供的 ConfigurationProperties注解 用来快速、方便地 将配置文件中的 自定义 属性值批量注入 某个Bean 对象的 多个对应属性 中。假设现在有一个配置文件使用 ConfigurationProperties 注入配置文件的属性示例代码如下 : Component //将该类交给IOC容器管理,变成一个bean
//该注解的作用: 将配置文件中自定义的属性值注入到某个bean对象中的对应属性中
ConfigurationProperties(prefix person)//将配置文件( application.properties/application.yaml )中以后person开头的数据通过“set方法”注入到该类中属性
public class Person {private int id;//属性的set方法public void setId(int id) {this.id id;}
}上述代码使用 Component 和 ConfigurationProperties(prefix “person”) 将 配置文件中 的 每个属性映射 到 person类属性中 。 需要注意 的是使用 ConfigurationProperties 注解 批量注入属性值 时要保证配置文件中的 属性 与对应实体类的 属性名一致 否则无法 正确 获取并注入属性值 。 使用Value( )注解将“配置文件”中的“属性值”注入到“属性”中 (注入“个别属性值”) Value注解 是 Spring框架提 供的用来 读取配置文件中的属性值 并逐个 注入Bean对象 的 对应属性中。Spring Boot 框架对Spring 框架中的 Value注解进行了 默认继承所以在Spring Boot 框架中还可以使用该注解 读取和注入配置文件属性值。 Component //将该类交给IOC容器管理,变成一个bean
public class Person {Value(${person.id}) //将配置文件中的“属性值”注入到该类的属性中private int id;
}上述代码中Component注解和 Value注解用于 注入Person的id属性。其中Value 不仅支持注入Person的 id 属性而且 还可以直接为id属性赋值这是 ConfigurationProperties( )注解 不支持 的。 例子如 Student.java package com.myh.chapter_03.domain;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;
import java.util.Map;Component //将该类添加到IOC容器中作为一个bean(被IOC容器管理)
public class Student {//用该注解将配置文件中的属性值注入到该类的“属性”中Value(${person.id})private int id;Value(${person.name})private String name;private List hobby;private String[] family;private Map map;private Pet pet;Overridepublic String toString() {return Student{ id id , name name \ , hobby hobby , family Arrays.toString(family) , map map , pet pet };}
}pom.xml #对实体类对象Person进行属性设置, 一样是通过 ConfigurationProperties()注解来将下面的数据值注入到类的属性中的
person:id: 1name: tomhobby: [play,read,sleep]family: [father,mother]map: {k1: v1,k2: v2}pet: {type: dog,name: kitty}Chapter03ApplicationTests.java (测试类) package com.myh.chapter_03;import com.myh.chapter_03.domain.Person;
import com.myh.chapter_03.domain.Student;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;RunWith(SpringRunner.class) //测试运行器并加载SpringBoot测试注解
SpringBootTest //标记该类为“单元测试类”并加载项目的上下文环境ApplicationContext
class Chapter03ApplicationTests {Autowiredprivate Student student;Testpublic void studentTest() {System.out.println(student);}
}运行 studentTest( )方法控制台输出结果如下图所示 注意点 使用 Value( )注解 注入的 属性类型 只能是“ 基本数据类型”。 两种注解“对比分析” ConfigurationProperties( )注解 和 Value( )注解 的对比 如下表所示 对比ConfigurationProperties( )注解Value( )注解底层框架SpringBootSpring功能批量注入配置文件中的属性单个注入setter 方法需要不需要复杂类型属性注入支持支持松散绑定支持不支持JSR303 数据校验支持不支持SpEL表达式不支持支持 底层框架 ConfigurationProperties注解是 Spring Boot框架自带 的而 Value 注解是 Spring 框架支持的 只不过Spring Boot框架对Spring 进行了 默认支持所以也可以使用Value 注解的相关功能。 功能 ConfigurationProperties能够将配置文件中的属性 批量注入 Bean对象而Value 只能 一个一个单独注入。 属性 setter 方法 在使用 ConfigurationProperties注解进行配置文件 属性值读取注入 时还必须为 每一个属性 设置 setter方法通过对应的注解才能够将配置文件中的属性一一匹配并注入对应的 Bean 属性上。如果配置文件中没有配置属性值则会自动将对应的 Bean 属性设置为空。 用 ConfigurationProperties注解必须为每一个属性设setter方法这样才能完成属性值的注入Value 完全不需要为属性设置setter方法该注解会先通过表达式读取配置文件中指定的属性值然后自动注入下方的Bean属性上。如果读取的配置文件属性为空进行属性注入时程序会自动报错。 复杂类型属性注入 ConfigurationProperties( )注解 和 Value注解 支持 任意数据类型 的属性注入包括基本数据类型和复杂数据类型。 松散绑定 ConfigurationProperties注解进行配置文件属性值注入时支持松散绑定语法。例如Person类有一个字符串类型的属性firstName那么在配置文件中进行属性配置时可以使用如下配置方式示例代码如下 : person.firstName james //标准写法对应Person类属性名
person.first-name james //使用横线“-”分隔多个单词
person.first_name james //使用下划线_分隔多个单词
person.FIRST_NAME james //使用大小写格式推荐常量属性配置 如果要 注入上述松散绑定语法的属性那么使用 Value 注入是无效的只能使用ConfigurationProperties。 JSR303 数据校验 ConfigurationProperties注解进行配置文件属性值注入时支持JSR303数据校验 其主要作用是 校验配置文件 中 注入对应Bean属性 的值是否符合相关值的规则示例代码如下 : Component //加入到IOC容器中
ConfigurationProperties(prefix person)
Validated //引入Spring框架支持的数据校验规则
public class Example {Email //对属性进行规则匹配private String email;public void setEmail(String email) {this.email email;}
} 上述代码中使用 ConfigurationProperties注解注入配置文件属性值时在实体类Example上引入 Validated 注解进行数据校验在属性email 上引入Email 注解进行邮件规则校验。如果注入的配置文件属性值不符合相关校验规则程序会自动报错。Value 注解不支持 JSR303数据校验功能。 SpEL表达式 ( 使用“SpEL表达式”为属性“直接注入值” ) Value 注解 注入配置文件属性时支持 SpEL表达式语法即“#{xx}”。例如 Person 类有一个整数类型的属性id直接使用 SpEL 表达式语法进行属性注入 使用SpEL表达式直接为属性注入值 示例代码如下 //用SpEL来定义一个值, #{5*2} 是一个简单的数学表达式它计算 5乘以 2的结果,将给结果注入到id属性中
Value(#{5*2})
private int id;上述代码在 不使用配置文件 的情况下直接使用 Value注解 支持的 SpEL表达式注入Bean ( 通过该 注解支持的SpEL表达式来“直接”为“属性注入值” )。而 ConfigurationProperties注解 不支持此功能。 如何选择使用这“两种注解” 如果只是针对某一个业务需求要引入配置文件中的个别属性值推荐使用 Value( )注解。 如果只要 注入一两个属性值用 Value( )注解 如果针对某个JavaBean类需要 批量注入属性值则推荐使用ConfigurationProperties( )注解 注解。 如果要 注入多个属性值推荐使用 ConfigurationProperties( )注解