springboot全局配置文件介绍(代码片段)

格子衫111 格子衫111     2022-12-08     453

关键词:

全局配置文件能够对一些默认配置值进行修改。
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);
    

打印结果:

可以看出,测试方法showPersonInfo()运行成功,同时正确打印出了Person实体类对象。至此,说明
application.properties配置文件属性配置正确,并通过相关注解自动完成了属性注入

(4)中文乱码问题解决

调整文件编码格式:

设置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的三种配置文件是可以共存的:

这里,针对不同数据类型的属性值,介绍一下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)再次执行测试
Personid=1, name=‘王二麻子’, hobby=[play, read, sleep], family=[妻, 妾], map=k1=value1,
k2=value2, pet=Pettype=‘狗’, name=‘哈士奇’

可以看出,测试方法configurationTest()同样运行成功,并正确打印出了Person实体类对象。

需要说明的是,本次使用application.yaml配置文件进行测试时需要提前将application.properties配置文件中编写的配置注释,这是因为application.properties配置文件会覆盖application.yaml配置文件,这是因为在依赖管理中,application.properties配置文件在最后加载

3、配置文件属性值的注入

(1)使用@ConfigurationProperties注入属性

Spring Boot提供的@ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对应属性中。假设现在有一个配置文件,如果使用
@ConfigurationProperties注入配置文件的属性,示例代码如下:

上述代码使用@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文件格式的行内式写法的配置文件的属性注入都不支持,如果赋值会出现错误

springboot全局配置文件(代码片段)

Springboot全局配置文件1、格式2、作用3、附录springboot全局配置属性(示例)3.1、COREPROPERTIESBANNERLOGGINGAOPIDENTITY(ContextIdApplicationContextInitializer)ADMIN(SpringApplicationAdminJmxAutoConfiguration)AUTO-CO 查看详情

springboot核心配置与注解(代码片段)

SpringBoot核心配置与注解SpringBoot全局配置文件1、application.properties2、application.yaml全局配置文件能对一些默认配置值进行修改。SpringBoot使用一个application.properties或者application.yaml的文件作为全局配置文件。存放路径:src/main/reso... 查看详情

springboot整合mybatis(配置模式+注解模式)(代码片段)

springboot整合mybatis一.简单介绍二具体配置2.1.配置相关的依赖.2.2写.mapper、controller、service2.2.1mapper文件2.2.2service文件2.2.2controller文件2.3配置相关文件三、结果截图四、可能遇到的报错SpringBoot连接数据库报错:Accessdeniedforuser‘r... 查看详情

springboot中的配置文件详解(ymlproperties全局配置和自定义配置有趣的banner图配置)(代码片段)

...配置文件全局配置文件能够对一些默认配置值进行修改。SpringBoot使用一个application.properties或者application.yaml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。接下来,将针对... 查看详情

springboot配置文件详解(properties和yml)(代码片段)

...自己的配置文件,hibernate有hbm,mybatis有properties,同样,Springboot也有全局配置文件。Springboot使用一个全局的配置文件,而且配置文件的名字是固定的。有两种application.propertiesapplication.yml springboot配置文件的作用是用来修改Spr... 查看详情

springboot应用回顾(代码片段)

Springboot应用回顾1.SpringBoot应用回顾1.1约定优于配置1.2SpringBoot概念1.2.1什么是SpringBoot1.2.2SpringBoot主要特性1.3SpringBoot案例实现1.3.1案例实现1.3.2疑问1.4热部署1.4.1热部署实现演示1.4.2热部署原理分析1.4.3排除资源1.5全局配置文件1.5.1全... 查看详情

springboot中配置文件详解(ymlproperties全局配置和自定义配置),获取配置方式(代码片段)

...置文件全局配置文件是能够对一些默认配置值进行修改。SpringBoot使用一个application.properties或者application.yml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。  applicati... 查看详情

springboot的配置(代码片段)

一、配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的;application.propertiesapplication.yml配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;YAML :YAMLAin‘taMarkupLanguage(YAML不是一种标... 查看详情

springboot学习配置文件详解(代码片段)

正如所说,SpringBoot使用“习惯优于配置”,即项目中存在大量配置,此外还内置了一个习惯性的配置,让你无需手动进行配置,这样,便让你的项目快速运行起来,而如何开启项目中的各个功能模块的默认配置,这就用到了Sprin... 查看详情

springboot应用回顾(代码片段)

Springboot应用回顾1.SpringBoot应用回顾1.1约定优于配置1.2SpringBoot概念1.2.1什么是SpringBoot1.2.2SpringBoot主要特性1.3SpringBoot案例实现1.3.1案例实现1.3.2疑问1.4热部署1.4.1热部署实现演示1.4.2热部署原理分析1.4.3排除资源1.5全局配置文件1.5.1全... 查看详情

springboot应用回顾(代码片段)

Springboot应用回顾1.SpringBoot应用回顾1.1约定优于配置1.2SpringBoot概念1.2.1什么是SpringBoot1.2.2SpringBoot主要特性1.3SpringBoot案例实现1.3.1案例实现1.3.2疑问1.4热部署1.4.1热部署实现演示1.4.2热部署原理分析1.4.3排除资源1.5全局配置文件1.5.1全... 查看详情

springboot系列springboot配置全局事务处理(代码片段)

六、SpringBoot配置全局事务处理6.1SringBoot声明式事务6.2@Transactional注解的常用属性:6.3事务传播行为propagation6.4配置全局事务6.1SringBoot声明式事务SpringBoot开启声明式事务,只需要一个@Transactional就可以。因为在SpringBoot... 查看详情

springboot配置文件详解(代码片段)

  SpringBoot提供了两种常用的配置文件,分别是properties文件和yml文件。一、yml配置方式  以空格的缩进程度来控制层级关系。空格的个数并不重要,只要左边空格对齐则视为同一个层级。注意不能用tab代替空格。且大小写敏... 查看详情

springboot----四yaml配置注入(代码片段)

四、yaml配置注入4.1、配置文件SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueapplication.yml语法结构:key:空格value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底... 查看详情

史上最全面的springboot配置文件详解(代码片段)

SpringBoot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍。SpringBoot配置文件对SpringBoot来说就是入门和基础,经常会用到,所以写下做个总结以便日后查看。1.配置文件当我们构建完SpringBoot项目后,会... 查看详情

配置文件详细讲解(代码片段)

一、配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的application.propertiesapplication.yml配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;YAML(YAMLAin’tMarkupLanguage)YAML是“YAML不是... 查看详情

springboot设置全局上传文件路径并上传文件(代码片段)

...这个路径不会随便写。比如这篇文章中的路径:解决SpringBoot文件上传报错:org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException我当时就想着随便写一个路径进行测试,所以临时定义了一个路径,其实这样的... 查看详情

springboot入门(项目搭建及基本配置)(代码片段)

...目1、先创建一个maven项目删除不用的文件2、再创建一个springboot项目二、SpringBoot–配置属性1、SpringBoot的配置SpringBoot使用一个固定文件名做为全局的配置文件,用来修改SpringBoot自动 查看详情