【SpringBoot】读取application.yml配置中的三种方式

文章介绍了在SpringBoot项目中使用@Value注解、Environment对象以及@ConfigurationProperties绑定配置类来获取application.yml配置文件数据的方法。@Value适用于简单属性,Environment适用于动态获取值,而@ConfigurationProperties适用于大量配置数据的封装。每种方式都有其适用场景和优缺点。

SpringBoot 获取配置文件数据

@Value注解

applicaiton.yml

sys:
  name: book-value
  age: 12
  flag: true

BootValueApplicationTests.java


@RunWith(SpringRunner.class)
@SpringBootTest
public class BootValueApplicationTests {

    @Value("${sys.name}")
    private String sysName;

    @Value("${sys.age}")
    private Integer sysAge;
    
    @Value("${sys.flag}")
    private Boolean sysFlag;

    @Value("${sys.noValue:123}")
    private String sysNoValue;

    @Test
    public void contextLoads() {
        System.out.println(sysName);
        System.out.println(sysAge);
        System.out.println(sysFlag);
        System.out.println(sysNoValue);
    }
}

打印如下所示

book-value
12
true
123

注意的地方

当对应的值不存在时,系统会报错。我们可以给定一个默认值即可。

如下所示:

 @Value("${sys.noValue:123}")
 private String sysNoValue;

@Value("${sys.Value:}")
private String sysNoValue;

在这里,sys.noValue这个值是不存在的,我们可以给定一个默认值为123,当然,我们如果不指定默认值的,它的默认值为空字符串。

优缺点

  • 优点:单个使用方便,灵活性高

  • 缺点:获取配置文件信息多,需要些大量的@Value,不利于开发,增加开发者的工作量

Environment对象

首先我们需要引入 Environment.
如下所示:

@RunWith(SpringRunner.class)
@SpringBootTest
public class BootValueApplicationTests {
    @Autowired
    private Environment environment;

    @Test
    public void getValueByEvi() {
        String name =environment.getProperty("sys.name");
        System.out.println(name);
    }
}

当获取的值不存在时

此时,不会报错,获取的值为空。

 String halo =environment.getProperty("sys.halo");
 System.out.println(halo); // null

@ConfigurationProperties

这种方式常用于 配置的数据较多,封装成一个实体类。

实体类

@Data
@Component
@ConfigurationProperties(prefix = "sys")
public class SysConfig {
    private String name;
    private Integer age;
    private Boolean flag;
}

测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class BootValueApplicationTests {
    @Resource
    private SysConfig sysConfig;

    @Test
    public void getValueByConfigurationProperties() {
        System.out.println(sysConfig.getName());
        System.out.println(sysConfig.getAge());
        System.out.println(sysConfig.getFlag());
    }
}

测试结果如上所示。

### 如何在 Spring Boot 中从 `application.yml` 文件读取数据库配置Spring Boot 应用程序中,可以通过定义 `application.yml` 或 `application.properties` 来管理应用程序的配置。对于数据库连接的相关参数,通常会使用前缀为 `spring.datasource.*` 的键值对来指定数据源的信息。 以下是关于如何通过 `application.yml` 配置文件读取数据库配置的具体方法: #### 1. 数据库配置项说明 Spring Boot 提供了一组标准的属性用于配置数据库连接[^2]。这些属性可以直接写入 `application.yml` 文件中,并由框架自动加载并应用到相应的组件中。常见的数据库相关配置如下所示: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate.dialect: org.hibernate.dialect.MySQL8Dialect ``` - **url**: 数据库的 JDBC 连接 URL。 - **username/password**: 访问数据库所需的用户名和密码。 - **driver-class-name**: 所需的 JDBC 驱动类名称(可选)。如果未指定,则根据 URL 自动推断驱动器。 - **hibernate.ddl-auto**: Hibernate DDL 自动生成模式,常见选项有 `create`, `update`, 和 `none` 等[^2]。 - **show-sql**: 是否显示 SQL 查询日志。 #### 2. 使用 @ConfigurationProperties 绑定自定义对象 除了直接利用内置的数据源配置外,还可以通过创建一个 Java 类并将该类标记为 `@ConfigurationProperties(prefix="spring.datasource")` 注解的方式实现更灵活的配置绑定。 下面是一个简单的例子展示如何将 `application.yml` 中的内容映射至 POJO 对象: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "spring.datasource") public class DatabaseConfig { private String url; private String username; private String password; private String driverClassName; // Getters and Setters } ``` 当此 Bean 被扫描时,Spring 将尝试匹配 `application.yml` 下对应路径下的字段填充到实例变量里去[^2]。 #### 3. 日常开发注意事项 为了确保项目能够正常运行,在实际部署过程中需要注意以下几点事项: - 如果切换不同的环境(比如测试/生产),建议采用 profile 功能区分不同场景下使用的配置文件[^2]; - 敏感信息如密码最好不要硬编码于版本控制系统之中,考虑借助外部化工具或者密钥管理系统保管敏感凭证; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值