Springboot配置文件

目录

[1 Springboot的热部署](#1 Springboot的热部署)

[2 配置文件](#2 配置文件)

[3 YAML语法](#3 YAML语法)

[3.1 基本语法](#3.1 基本语法)

[3.2 值的写法](#3.2 值的写法)

[4 配置文件值注入](#4 配置文件值注入)

[4.1 properties配置文件在idea中默认 utf-8 肯呢个会乱码](#4.1 properties配置文件在idea中默认 utf-8 肯呢个会乱码)

[4.2 @Value获取值和@ConfigurationProperties获取值比较](#4.2 @Value获取值和@ConfigurationProperties获取值比较)

[4.3 配置文件注入值数据校验](#4.3 配置文件注入值数据校验)

[4.4 @PropertySource&@ImportResource&@Bean](#4.4 @PropertySource&@ImportResource&@Bean)

@PropertySource:加载指定的配置文件;与@ConfigurationProperties结合使用

@ImportResource:

[5 配置文件占位符](#5 配置文件占位符)

[5.1 随机数](#5.1 随机数)

[5.2 占位符获取之前配置的值,如果没有可以是用:指定默认值](#5.2 占位符获取之前配置的值,如果没有可以是用:指定默认值)

1 Springboot的热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

引入依赖

java 复制代码
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-devtools</artifactId> 
    <optional>true</optional> 
</dependency>

2 配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

•application.properties

•application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

YAML(YAML Ain't Markup Language)

YAML A Markup Language:是一个标记语言

YAML isn't Markup Language:不是一个标记语言;

标记语言:

以前的配置文件;大多都使用的是 xxxx.xml文件;

YAML:以数据为中心,比json、xml等更适合做配置文件;

3 YAML语法

3.1 基本语法

k:(空格)v:表示一对键值对(空格必须有);

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

属性和值也是大小写敏感

3.2 值的写法

字面量:普通的值(数字,字符串,布尔)

k: v:字面直接来写;

字符串默认不用加上单引号或者双引号;

"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

name: 'zhangsan \n lisi':输出;zhangsan \n lisi

对象、Map(属性和值)(键值对):

k: v:在下一行来写对象的属性和值的关系,注意缩进

对象还是k: v的方式

数组(List、Set):

用- 值表示数组中的一个元素

行内写法

4 配置文件值注入

我们可以导入配置文件处理器,以后编写配置就有提示了

java 复制代码
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring‐boot‐configuration‐processor</artifactId>
     <optional>true</optional>
</dependency>

4.1 properties配置文件在idea中默认 utf-8 肯呢个会乱码

4.2 @Value获取值和@ConfigurationProperties获取值比较

测试类

三种获取值的方法

  • 第一种是只写@Value注解
  • 第二种是写@ConfigurationProperties+yml(里面要写Person)

支持松散绑定

  • 第三种是@Value+yml(里面不写Person,直接顶格写属性)

这种组合的方式不支持松散绑定(yml文件里写last_name,@Value("{lastName}") / @Value("{Person.lastName}")赋值不上去,接收不到)

复杂类型(List、Map、Dog-其他类型)这种方式不适合

第三种的另一个写法:@Value+yml(里面正常写,加上Person)

松散绑定是lastName=last_name

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties

4.3 配置文件注入值数据校验

第一种和第三种不支持(@Value不支持)

java 复制代码
@Component
@ConfigurationProperties(prefix = "person")
@Validated  //如果email不符合条件就赋值不过去,会进行校验(@Value不支持,@ConfigurationProperties支持)
public class Person {
   /**
    * <bean class="Person">
    * <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#
      {SpEL}"></property>
    * <bean/>
    */
   //lastName必须是邮箱格式
   @Email
   //@Value("${person.last‐name}")
   private String lastName;
   //@Value("#{11*2}")
   private Integer age;
   //@Value("true")
   private Boolean boss;
   private Date birth;
   private Map<String,Object> maps;
   private List<Object> lists;
   private Dog dog;

4.4 @PropertySource&@ImportResource&@Bean

@PropertySource:加载指定的配置文件;与@ConfigurationProperties结合使用

java 复制代码
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* *
只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
* *
/
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#
{SpEL}"></property>
* <bean/>
*/
//lastName必须是邮箱格式
// @Email
//@Value("${person.last‐name}")
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;

person.properties文件

java 复制代码
person.last‐name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

@ImportResource

导入Spring的配置文件,让配置文件里面的内容生效;

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式

1、配置类@Configuration------>Spring配置文件,在启动类的同级或者子级目录下

2、使用@Bean给容器中添加组件

java 复制代码
/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*
* 在配置文件中用<bean><bean/>标签添加组件
* *
/
@Configuration
public class MyAppConfig {
     //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
     @Bean
     public HelloService helloService02(){
         System.out.println("配置类@Bean给容器中添加组件了...");
         return new HelloService();
     }
}

5 配置文件占位符

5.1 随机数

java 复制代码
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

5.2 占位符获取之前配置的值,如果没有可以是用:指定默认值

java 复制代码
person.last‐name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
相关推荐
小希爸爸1 分钟前
curl 网络测试常用方法
后端
星星电灯猴33 分钟前
iOS WebView 调试实战 页面跳转失效与历史记录错乱的排查路径
后端
重楼七叶一枝花1 小时前
MySQL的在线模式学习笔记
后端·mysql
代码男孩1 小时前
python包管理工具uv的使用
后端
CodeWolf2 小时前
关于端口号配置优先级的问题
后端
C182981825752 小时前
Ribbon轮询实现原理
后端·spring cloud·ribbon
lemon_sjdk2 小时前
LWJGL教程(2)——游戏循环
java·人工智能·算法·游戏
鹿鹿的布丁2 小时前
freeswitch通过编译方式安装
后端
JavaDog程序狗2 小时前
【软件环境】Windows安装JDK21
后端
舒一笑2 小时前
撕碎语法教科书!PandaCoder教大模型「暴力越狱」逐字翻译
后端·程序员·intellij idea