05-3 @PropertySource @ImportResource @Bean读取或替代配置文件

本文介绍了在Spring Boot中如何使用@PropertySource加载额外的配置文件db.properties,通过@ConfigurationProperties绑定属性,并展示了@ImportResource导入XML配置文件以及@Bean注解创建bean的过程。

1、@PropertySource(了解)

我们知道系统配置文件的文件可以叫application.properties或者application.yml,但是由于企业项目比较庞大,需要配置内容比较多,我们可能把一个配置文件写成多个;
比如整个项目中有两个配置文件:
application.properties
db.properties
这种情况是会出现的,比如application.properties我们编写系统的配置信息(系统启动端口),db.properties我们编写数据库的配置信息;那这就有问题了,系统默认只加载application.properties或application.yml这俩中的一个,那db.properties文件如何加载,这就是我们@PropertySource注解的用处了

实现步骤

【1】 使用idea创建一个web工程

【2】在src/main/resource下创建db.properties

在这里插入图片描述

【3】编辑db.properties,填写如下内容

# 数据库账号
db.uname=root
# 数据库密码
db.pwd=123456

【4】创建一个类叫db.java

这里要注意db类和Application入口类的层次关系,前面说了,放错了会404

在这里插入图片描述

【5】编辑db.java,输入如下内容

这里有一点非常重要:使用PropertySource注解的同时,需要加上@ConfigurationProperties注解,因为需要它去指定前缀,我们在db.properties文件中编写的两个属性的前缀都是db;

package com.qs.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component      //让spring容器创建DB类对象
@PropertySource(value = {
   
   "classpath:db.properties"})
@ConfigurationProperties(prefix = "db")
public class DB {
   
   

    private String uname;
    private String pwd;

    public String getUname() {
   
   
        return uname;
    }

    public voi
### 关于 @PropertySource 注解读取配置文件时可能出现的错误 当使用 `@PropertySource` 注解来加载外部 `.properties` 者其他类型的配置文件时,可能会遇到一些常见问题。以下是针对该场景下可能存在的解决方案: #### 1. 配置类未标注为 Configuration 类型 如果使用了 `@PropertySource` 注解,则需要确保对应的 Java 配置类已经被标记为 `@Configuration`。这是因为只有被 Spring 容器识别为配置类的对象才能正确解析并加载资源文件中的键值对[^1]。 ```java @Configuration @PropertySource("classpath:custom-config.properties") public class AppConfig { // Bean definitions or other configurations here... } ``` #### 2. 缺少 Getters/Setters 方法 对于那些计划利用 `@ConfigurationProperties` 来绑定特定前缀下的属性至实体对象字段上的情况而言,目标 POJO 必须提供标准形式的 getter 和 setter 接口以便框架能够顺利完成数据映射操作[^2]。如果没有这些访问器函数存在的话,即使指定了正确的路径也可能无法正常工作。 #### 3. 文件路径书写不准确者不存在的目标文件 确认所提供的相对地址确实指向有效的资源项,并且遵循项目结构约定。例如,在上述例子中提到的是 `"classpath:config/xxx.yml"` ,这意味着期望找到位于 src/main/resources/config 下名为 xxx.yml 的文档;如果是 properties 格式的文本则应调整名称后缀相应地改为 .properties 。另外还需留意大小写敏感度以及分隔符差异等问题。 #### 4. 使用 Yaml 而非 Properties 格式时需额外依赖支持库 假如打算采用 YAML 格式的配置源而非传统的 PROPERTIES 方式,请记得引入必要的 Jackson Databind 组件以及其他关联的支持包以实现对该种语法风格的良好兼容性处理。 #### 示例代码片段展示如何正确运用 PropertySourcesPlaceholderConfigurer 实现占位符替换功能: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; @Configuration @PropertySource("classpath:appsettings.properties") public class ApplicationConfig { @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } ... } ``` 以上就是关于解决 '@PropertySource' 在 Spring 应用程序里边读取设定档时候发生故障的一些策略建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值