SpringBoot全局配置文件介绍 叁歲伎倆 2024-04-07 14:56 16阅读 0赞 全局配置文件能够对一些默认配置值进行修改。 Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。 接下来,将针对这两种全局配置文件进行讲解 : Spring Boot配置文件的命名及其格式: * application.properties * application.yaml * application.yml ### 1、application.properties配置文件 ### 使用Spring Initializr方式构建Spring Boot项目时,会在resource目录下自动生成一个空的application.properties文件,Spring Boot项目启动时会自动加载application.properties文件。 我们可以在application.properties文件中定义Spring Boot项目的相关属性,当然,这些相关属性可以是系统属性、环境变量、命令参数等信息,也可以是自定义配置文件名称和位置 application.properties #定义数据库的连接信息 JdbcTemplate spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=zhangwt 接下来,通过一个案例对Spring Boot项目中application.properties配置文件的具体使用进行讲解 演示: 预先准备了两个实体类文件,后续会演示将application.properties配置文件中的自定义配置属性注入到Person实体类的对应属性中 ###### (1)先在项目的com.zwt 包下创建一个pojo包,并在该包下创建两个实体类Pet和Person ###### Pet.java /** * 宠物类 */ 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; } @Override public String toString() { return "Pet{" + "type='" + type + '\'' + ", name='" + name + '\'' + '}'; } } Person.java @Component //将配置文件中所有以person开头的配置信息注入当前类中 //前提1:必须保证配置文件中person.xx与当前Person类的属性名一致 //前提2:必须保证当前Person中的属性都具有set方法 @ConfigurationProperties(prefix = "person") public class Person { private int id; //id private String name; //名称 private List hobby; //爱好 private String[] family; //家庭成员 private Map map; private Pet pet; //宠物 @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", hobby=" + hobby + ", family=" + Arrays.toString(family) + ", map=" + map + ", 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; } } @ConfigurationProperties(prefix = “person”)注解的作用是将配置文件中以person开头的属性值通过 setXX()方法注入到实体类对应属性中 @Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有 这样才能被@ConfigurationProperties注解进行赋值 ###### (2)打开项目的resources目录下的application.properties配置文件,在该配置文件中编写需要对Person类设置的配置属性 ###### application.properties #自定义配置信息注入到Person对象中 person.id=1 person.name=tom ##list person.hobby=吃饭,睡觉,打豆豆 ##String[] person.family=father,mather ##map person.map.k1=v1 person.map.k2=v2 ##pet对象 person.pet.type=dog person.pet.name=旺财 ###### (3)查看application.properties配置文件是否正确,同时查看属性配置效果,打开通过IDEA工具创建的项目测试类,在该测试类中引入Person实体类Bean,并进行输出测试 ###### @RunWith(SpringRunner.class) //@RunWith:运行器 @SpringBootTest //标记为当前类为SpringBoot测试类,加载项目的ApplicationContext上下文环境 class Springbootdemo2ApplicationTests { @Autowired private Person person; @Test void showPersonInfo(){ System.out.println(person); } 打印结果: ![在这里插入图片描述][7eadecfe6656446ebd3846f37126e381.png] 可以看出,测试方法showPersonInfo()运行成功,同时正确打印出了Person实体类对象。至此,说明 application.properties配置文件属性配置正确,并通过相关注解自动完成了属性注入 ###### (4)中文乱码问题解决 ###### 调整文件编码格式: ![在这里插入图片描述][0d5b40992b6841a3a97dda5912413eb8.png] 设置Tomcat及Http编码 application.properties #解决中文乱码 server.tomcat.uri-encoding=UTF-8 spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true ### 2、application.yaml 配置文件 ### YAML文件格式是Spring Boot支持的一种JSON文件格式,相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。application.yaml配置文件的工作原理和application.properties是一样的,只不过yaml格式配置文件看起来更简洁一些。 * YAML文件的扩展名可以使用.yml或者.yaml。 * application.yml文件使用 “key:(空格)value”格式配置属性,使用缩进控制层级关系。 **SpringBoot的三种配置文件是可以共存的:** ![在这里插入图片描述][4daa3d835a5649b984ae06905a58968e.png] 这里,针对不同数据类型的属性值,介绍一下YAML ###### (1)value值为普通数据类型(例如数字、字符串、布尔等) ###### 当YAML配置文件中配置的属性值为普通数据类型时,可以直接配置对应的属性值,同时对于字符 串类型的属性值,不需要额外添加引号,示例代码如下 server: port: 8888 servlet: context-path: /hello ###### (2)value值为数组和单列集合 ###### **当YAML配置文件中配置的属性值为数组或单列集合类型时,主要有两种书写方式:缩进式写法和行内 式写法** 其中,缩进式写法还有两种表示形式,示例代码如下 person: hobby: - play - read - sleep 或者 person: hobby: play, read, sleep 上述代码中,在YAML配置文件中通过两种缩进式写法对person对象的单列集合(或数组)类型的爱好 hobby赋值为play、read和sleep。其中一种形式为“-(空格)属性值”,另一种形式为多个属性值之前加 英文逗号分隔(注意,最后一个属性值后不要加逗号)。 行内式写法,示例代码如下 person: hobby: [play,read,sleep] 通过上述示例对比发现,YAML配置文件的行内式写法更加简明、方便。另外,包含属性值的中括号“\[\]”还可以进一步省略,在进行属性赋值时,程序会自动匹配和校对 ###### (3)value值为Map集合和对象 ###### 当YAML配置文件中配置的属性值为Map集合或对象类型时,YAML配置文件格式同样可以分为两种书写方式:缩进式写法和行内式写法。 其中,缩进式写法的示例代码如下 person: map: k1: 这是k1对应的value k2: 这是k2对应的value 对应的行内式写法示例代码如下 person: map: {k1: v1,k2: v2} 在YAML配置文件中,配置的属性值为Map集合或对象类型时,缩进式写法的形式按照YAML文件格式编 写即可,而行内式写法的属性值要用大括号“\{\}”包含。 接下来,在Properties配置文件演示案例基础上,通过配置application.yaml配置文件对Person对象进行赋值,具体使用如下 (1)在项目的resources目录下,新建一个application.yaml配置文件,在该配置文件中编写为Person 类设置的配置属性 person: id: 1 name: 王二麻子 hobby: - play - read - sleep family: - 妻 - 妾 map: k1: value1 k2: value2 pet: type: 狗 name: 哈士奇 (2)再次执行测试 Person\{id=1, name=‘王二麻子’, hobby=\[play, read, sleep\], family=\[妻, 妾\], map=\{k1=value1, k2=value2\}, pet=Pet\{type=‘狗’, name=‘哈士奇’\}\} 可以看出,测试方法configurationTest()同样运行成功,并正确打印出了Person实体类对象。 需要说明的是,本次使用application.yaml配置文件进行测试时需要提前将application.properties配置文件中编写的配置注释,这是因为application.properties配置文件会覆盖application.yaml配置文件,这是因为在依赖管理中,application.properties配置文件在最后加载 ![在这里插入图片描述][a83a984b688a4711b28b0af7a0a3db0a.png] ### 3、配置文件属性值的注入 ### ###### (1)使用@ConfigurationProperties注入属性 ###### Spring Boot提供的@ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值**批量**注入到某个Bean对象的多个对应属性中。假设现在有一个配置文件,如果使用 @ConfigurationProperties注入配置文件的属性,示例代码如下: ![在这里插入图片描述][578f86a0ca3342fab16068bff18daf83.png] 上述代码使用@Component和@ConfigurationProperties(prefix = “person”)将配置文件中的每个属性映射到person类组件中。 ###### (2)使用@Value注入属性 ###### @Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中,Spring Boot框架从Spring框架中对@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。使用@Value注入属性的示例代码如下 @Component public class Student { @Value("${person.id}") private String number; @Value("${person.name}") private String name; // @Value("${person.hobby}") private List<String> hobby; //@Value("${person.map}") private Map<String, String> map; //省略toString } 上述代码中,使用@Component和@Value注入Person实体类的id属性。其中,@Value不仅可以将配置文件的属性注入Person的id属性,还可以直接给id属性赋值,这点是@ConfigurationProperties不支持的 如: @Component public class Person { @Value("1") private int id; } tips: > * 使用@Value注解方式需要对每一个属性注入设置,同时又免去了属性的 setXX()方法 > * 使用@Value注解只可对对象的**普通类型**属性进行赋值,而对于包含Map集合、对象以及YAML文件格式的行内式写法的配置文件的属性注入都不支持,如果赋值会出现错误 [7eadecfe6656446ebd3846f37126e381.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/07/398c1c0cc0c0428da6986370d7e85431.png [0d5b40992b6841a3a97dda5912413eb8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/07/4c4636a0c8c4464d9101fb890bd88374.png [4daa3d835a5649b984ae06905a58968e.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/07/f4fbf94fc1544dcd9811d0bce615dc01.png [a83a984b688a4711b28b0af7a0a3db0a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/07/e3a509e2789d44d287ab94aea534e5ef.png [578f86a0ca3342fab16068bff18daf83.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/07/4d7b6923eba4468e9ac352ce376ef839.png
还没有评论,来说两句吧...