SpringBoot:配置文件和@ConfigurationProperties,@Configuration和@Bean

💥 该系列属于【SpringBoot基础】专栏,如您需查看其他SpringBoot相关文章,请您点击左边的连接

目录

一、SpringBoot常用的两种配置文件

1. application.properties 

(1)格式

(2)可读性

(3)特性

(4)兼容性

(5)案例

2. application.yml

(1)格式

(2)可读性

(3)特性

(4)兼容性

(5)案例

二、SpringBoot程序中读取配置文件的值

1. TestProperties读取配置文件

2. 【ReadConfigController】测试

3. 接口测试

4. 分析

三、配置类中设定启动时存放在Spring容器中的Bean类

1. 设置一个即将要存放在容器中的Bean

2. 配置类加载该Bean

3. 【ReadConfigController】测试

4. 接口测试


一、SpringBoot常用的两种配置文件

SpringBoot中常用的配置文件有两种.properties和.yml。

1. application.properties 

(1)格式

  • 传统的配置文件格式,使用键值对。
  • 键和值之间用等号(=)连接。
  • 没有缩进要求,通常也不使用层级结构。

(2)可读性

  • 由于缺乏层级结构,当配置项较多时,可读性较差。

(3)特性

  • 更适合简单的键值对配置。
  • 不支持复杂的数据类型。
  • 语法相对简单,但不够灵活。

(4)兼容性

  • 适用于传统的Java应用程序。
  • 大多数Java框架和库都支持.properties文件。

(5)案例

mybatis.mapper-locations=classpath:mappers/*xml

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=your_password

test.config.id=1
test.config.password=123456
test.config.url=www.baidu.com

2. application.yml

(1)格式

  • 使用缩进来表示层级关系。
  • 键值对通常不需要用等号连接,而是通过冒号(:)并在值前加一个空格。
  • 支持复杂的数据结构,如列表和嵌套对象。

(2)可读性

  • 使用缩进和清晰的层级结构,通常更易于阅读和理解。
  • 支持注释(使用#),使得配置文件更易于维护。

(3)特性

  • 支持复杂的数据类型,如数组、列表和映射。
  • 可以使用锚点(&)和别名(*)来引用重复的数据,减少冗余。
  • 更适合于有层级关系的配置,尤其是在微服务架构中。
  • 语法灵活,但需要正确处理缩进,否则会导致解析错误。

(4)兼容性

  • 在Spring框架及其生态系统中被广泛使用。
  • 逐渐被更多的现代应用程序和框架所支持。

(5)案例

mybatis:
  mapper-locations: classpath:mappers/*xml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: your_password

test:
  config:
    id: 1
    password: 123456
    url: www.baidu.com

二、SpringBoot程序中读取配置文件的值

1. TestProperties读取配置文件

@Data //生成getter,setter,toString等
@Component
@ConfigurationProperties(prefix = "test.config") //读取配置文件中的test.config.*
public class TestProperties {
    private int id;
    private String password;
    private String url;
}

2. 【ReadConfigController】测试

@RestController
public class ReadConfigController {

    @Autowired
    private TestProperties testProperties;

    @RequestMapping("/read")
    public String read() {
        int id = testProperties.getId();
        String url = testProperties.getUrl();
        String password = testProperties.getPassword();
        System.out.println(id);
        System.out.println(url);
        System.out.println(password);
        return id + "\n" + url + "\n" + password;
    }

}

3. 接口测试

4. 分析

  • @Component 注解将 TestProperties 类标记为一个 Spring Bean,使其能够被 Spring 容器管理。
  • @Autowired 注解用于自动装配 TestProperties 类的实例到 ReadConfigController 中。在 ReadConfigController 中,通过自动装配的 TestProperties 实例,可以直接访问其属性。

三、配置类中设定启动时存放在Spring容器中的Bean类

1. 设置一个即将要存放在容器中的Bean

即将要存放在容器中的Bean——MathUtil

public class MathUtil {
    public void printPI(){
        System.out.println(Math.PI);
    }
}

2. 配置类加载该Bean

@Slf4j
@Configuration
public class TestConfig {
    @Bean //声明MathUtil要放入Spring容器
    protected MathUtil printMessage(TestProperties testProperties) { //TestProperties只需满足属于Spring容器里即可
        log.info(String.valueOf(testProperties)); //控制台输出已放入Spring容器的对象
        MathUtil mathUtil = new MathUtil();
        return mathUtil; //把MathUtil放入Spring容器
    }
}

3. 【ReadConfigController】测试

@RestController
public class ReadConfigController {

    @Autowired
    private MathUtil mathUtil; 

    @RequestMapping("/printPI")
    public String printPI() {
        mathUtil.printPI(); //输出3.1415926...
        return "OK";
    }

}

4. 接口测试

2024-07-30 00:31:52.782  INFO 193784 --- [           main] com.example.config.TestConfig            : TestProperties(id=1, password=123456, url=www.baidu.com)
3.141592653589793

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值