发表于 2024-2-26 16:43:00

3、SpringBoot2之配置文件

3.1、环境搭建

3.1.1、在project创建新module

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218081650912-972089095.png
3.1.2、选择maven

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218081742548-2061024980.png
3.1.3、设置module名称和路径

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218081936236-1758990148.png
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218081947215-621915357.png
3.1.4、module初始状态

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218082200584-915676384.png
3.1.5、引入springboot父工程

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218100911623-1751162143.png
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.7.18</version>
    </parent>3.1.6、引入启动器依赖

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218101119109-1522600084.png
    <dependencies>
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
    </dependencies>3.1.7、创建启动类

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218103427393-795751971.png
package online.liaojy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* @author liaojy
* @date 2023/12/18 - 6:24
*/
@SpringBootApplication
public class MainApplication {

    public static void main(String[] args) {
      SpringApplication.run(MainApplication.class,args);
    }

}3.1.8、创建控制器

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218110606024-2026270313.png
package online.liaojy.controller;

import org.springframework.web.bind.annotation.RestController;

/**
* @author liaojy
* @date 2023/12/18 - 7:04
*/
@RestController
public class TestController {

}3.2、统一配置管理概述


[*]在 Spring Boot 工程中,实行统一的配置管理,即所有参数配置都会集中到一个固定位置和命名的文件中;
[*]配置文件的固定位置是在 src/main/resources 目录下,该目录是 Spring Boot 工程默认的类路径(classpath);
[*]配置文件的命名格式为:application+后缀+扩展名,扩展名可以是 properties 、yaml 或 yml ;
[*]如果 application.properties 和 application.yml(.yaml) 同时存在,则 properties 的优先级更高。
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218115101249-2006374910.png
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218114003256-836210443.png
在 Spring Boot 工程的统一配置文件中,有自定义的参数项,也有固定的参数项,固定的参数项及默认值见 Spring Boot 官方文档:
https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/application-properties.html
3.3、properties配置文件

3.3.1、创建application.properties配置文件

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218160815730-1763429689.png
# application.properties 为统一配置文件,既可以配置固定功能的参数项,也可以配置自定义的参数项

# 固定功能参数项的示例
server.port=8088
server.servlet.context-path=/application


# 自定义参数项的示例
my.name=liaojy3.3.2、读取配置文件中的参数值

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218161325060-983772426.png
在统一配置文件中的参数项的值,都可以使用@Value("${键}")的方式直接读取,但一般都是读取自定义的参数项的值
    @Value("${my.name}")
    private String name;

    @RequestMapping("/readApplication")
    public String readApplication(){
      return "Hello,"+name+"!";
    }3.3.3、测试效果

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231218161858174-496491491.png
3.4、yaml配置文件(了解)

3.4.1、yaml概述


[*]YAML(YAML Ain’t Markup Language)是一种基于层次结构的数据表示方式;
[*]YAML配置文件的扩展名,可以是 yaml ,也可以是 yml ;
[*]YAML 配置文件中的键和值之间使用冒号 “ : ” 分隔,并使用缩进表示层级关系,可以减少冗余的内容;
[*]相比起 properties 配置文件,YAML 配置文件支持复杂的数据类型,集合类型可以通过减号 “ - ” 来表示。
注意:因为 YAML 配置文件无法搜索完整的参数项名称,且空格和缩进的格式经常被人诟病,所以本文更推荐使用 properties 配置文件
3.4.2、创建application.yml配置文件

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219102131640-765376553.png
# application.yml 为统一配置文件,既可以配置固定功能的参数项,也可以配置自定义的参数项

# 固定功能参数项的(properties)示例
# server.port=8088
# server.servlet.context-path=/application

# 固定功能参数项的(yml)示例
server:
port: 8088          # 注意冒号 “ : ” 和值之间有一个空格
servlet:
    context-path: /application


# 自定义参数项的(properties)示例,properties不支持复杂的数据类型
# my.name=liaojy

# 自定义参数项的(yml)示例
my:
name: liaojy
hobby:            # yml支持复杂的数据类型,,集合类型可以通过减号 “ - ” 来表示
    - book
    - music
    - movie3.4.3、读取配置文件中的参数值

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219102409719-1697854169.png
读取 YAML 配置文件中参数值的方式,和读取 properties 配置文件中参数值的方式相同,都是使用@Value("${键}")的方式直接读取;
需要注意的是,使用@Value("${键}")的方式,不能读取集合类型(本例为 my.hobby )的值,
如果希望读取集合类型的值,则需要使用 @ConfigurationProperties 注解(详细见3.5节)
@Value("${my.name}")3.4.4、测试效果

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219104129358-1167950111.png
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219104221760-1467559452.png
3.5、配置的批量注入

3.5.1、创建组件类

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219113034700-320655932.png
package online.liaojy.pojo;

import org.springframework.stereotype.Component;

import java.util.List;

/**
* @author liaojy
* @date 2023/12/19 - 7:12
*/
// @Component 注解的作用是将类标识为bean组件,因为只有在ioc容器中才能使用依赖注入给成员变量赋值
@Component
public class Me {

    private String name;

    private List<String> hobby;

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public List<String> getHobby() {
      return hobby;
    }

    public void setHobby(List<String> hobby) {
      this.hobby = hobby;
    }

    @Override
    public String toString() {
      return "Me{" +
                "name='" + name + '\'' +
                ", hobby=" + hobby +
                '}';
    }

}3.5.2、创建控制器方法

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219153540089-1836554914.png
    @Autowired
    private Me me;

    @RequestMapping("/me")
    public Me me(){
      return me;
    }3.5.3、@Value注解的不足


[*]@Value 注解需要一个个读取配置文件中的参数值到成员变量中;
[*]@Value 注解只能读取单个值,不能读取集合类型(本例为 my.hobby )的值。
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219153723142-2008190833.png
    @Value("${my.name}")
    private String name;

    @Value("${my.hobby}")
    private List<String> hobby;https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219154103853-1820391427.png
3.5.4、@ConfigurationProperties注解


[*]@ConfigurationProperties 注解是 spring boot 提供的重要注解,其作用是可以将配置批量注入到 bean 对象中;
[*]只要 @ConfigurationProperties 注解指定的前缀 + bean 对象中的属性名称,和配置文件中的“键”保持一致即可注入成功;
[*]该注解的优点除了方便(不需要一个个读取配置文件中的参数值到成员变量中)之外,还支持给集合类型赋值。
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219160351941-2094209090.png
@ConfigurationProperties(prefix = "my")3.5.5、测试配置批量注入的效果

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219161444052-1913828342.png
3.6、多环境的配置


[*]在一个项目的实际过程中,会存在不同的环境,例如开发、测试和生产环境;
[*]在不同的环境中,会使用不同的参数配置,例如数据库信息和日志级别等;
[*]在 spring boot 中,可以根据不同的运行环境来加载不同的配置。
注意:如果希望默认配置文件不太臃肿,也可以使用该功能将不同模块的配置参数存放到不同的配置文件中
3.6.1、配置文件分离

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219233048638-1597877004.png
创建一个用于开发环境的配置文件 application-dev.properties
# 该文件的配置用于开发环境

my.name=liaojy_devhttps://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219233423222-762037817.png
创建一个用于测试环境的配置文件 application-test.properties
# 该文件的配置用于测试环境

my.name=liaojy_testhttps://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219233621680-381870027.png
创建一个用于测试环境的配置文件 application-prod.properties
# 该文件的配置用于生产环境

my.name=liaojy_prod3.6.2、激活配置文件

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219235038071-404222731.png
# application.properties(.yml) 是 spring boot 的默认配置文件
# 如果没有额外激活其他(有后缀的)配置文件,则默认只使用 application.properties(.yml)

my.name=liaojy_default

# spring.profiles.active 参数用于激活指定的配置文件
# 本例激活的是 application-dev.properties 配置文件
# 如果想激活多个配置文件,则使用逗号分隔,例如:spring.profiles.active=dev,test
spring.profiles.active=dev3.6.3、配置参数的优先级


[*]如果设置了 spring.profiles.active ,但和 application.properties 无重叠的配置参数,则application.properties 的配置参数依然生效;
[*]如果设置了 spring.profiles.active ,并且和 application.properties 有重叠的配置参数,则以激活的配置参数优先;
[*]如果设置了 spring.profiles.active ,并且激活多个配置文件以及有重叠的配置参数,则以最后激活的配置参数优先。
3.6.4、测试效果

https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219235210564-608842569.png
https://img2023.cnblogs.com/blog/2052479/202312/2052479-20231219235328324-1227597050.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 3、SpringBoot2之配置文件