Spring boot中使用工具类 无需注入获取.yml中的值(第二种方法)

之前在一篇文章中写到在spring boot中使用工具类方式获取.yml文件中值的问题(文章参考:https://blog.csdn.net/xiao______xin/article/details/73274830),后续考虑了下还是不太优雅。后来通过查看源码发现了新大陆,即通过 :YamlPropertiesFactoryBean,具体实现如下:

1、新建 BeanConfiguration 类,用于项目启动构造我们的 工具类:

     

@Configuration
public class BeanConfiguration {
    @Bean
    public YamlConfigurerUtil ymlConfigurerUtil() {
        //1:加载配置文件
        Resource app = new ClassPathResource("application.yml");
        Resource appDev = new ClassPathResource("application-dev.yml");
        Resource appLocalDev = new ClassPathResource("application-prod.yml");
        Resource appPre = new ClassPathResource("application-test.yml");
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
        // 2:将加载的配置文件交给 YamlPropertiesFactoryBean
        yamlPropertiesFactoryBean.setResources(app, appDev, appLocalDev, appPre);
        // 3:将yml转换成 key:val
        Properties properties = yamlPropertiesFactoryBean.getObject();
        // 4: 将Properties 通过构造方法交给我们写的工具类
        YamlConfigurerUtil ymlConfigurerUtil = new YamlConfigurerUtil(properties);
        return ymlConfigurerUtil;
    }
}

2、新建我们的工具类 YamlConfigurerUtil:

public class YamlConfigurerUtil {
    private static Properties ymlProperties = new Properties();

    public YamlConfigurerUtil(Properties properties){
        ymlProperties = properties;
    }

    public static String getStrYmlVal(String key){
        return ymlProperties.getProperty(key);
    }

    public static Integer getIntegerYmlVal(String key){
        return Integer.valueOf(ymlProperties.getProperty(key));
    }
}

接下来我们进行测试 :

在yml中新增测试节点

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

    @Test
    public void test() {
        String val = YamlConfigurerUtil.getStrYmlVal("yml.test");
        System.out.println(val);


    }
}

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,您可以参考下面的代码实现: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.PropertiesLoaderUtils; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.Properties; @Component public class DruidDataSourceUtil { @Autowired private DataSourceProperties dataSourceProperties; /** * 获取 application-druid.yml 文件的数据库连接信息 * @return 数据库连接信息 */ public Properties getDruidDataSourceProperties() throws IOException { Properties properties = new Properties(); // 获取 application-druid.yml 文件 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource resource = resolver.getResource("classpath*:application-druid.yml"); // 读取 application-druid.yml 文件的数据库连接信息 PropertiesLoaderUtils.fillProperties(properties, resource); // 将 application-druid.yml 文件的数据库连接信息与 application.yml 文件的数据库连接信息合并 properties.put("spring.datasource.url", dataSourceProperties.getUrl()); properties.put("spring.datasource.username", dataSourceProperties.getUsername()); properties.put("spring.datasource.password", dataSourceProperties.getPassword()); return properties; } } ``` 在上面的代码,我们使用Spring Boot 提供的 `DataSourceProperties` 类,它可以帮助我们获取当前模块的数据库连接信息。然后,我们使用 `PathMatchingResourcePatternResolver` 类获取另一个模块下的 `application-druid.yml` 文件,并使用 `PropertiesLoaderUtils` 类读取该文件的数据库连接信息。最后,我们将另一个模块下的 `application-druid.yml` 文件的数据库连接信息与当前模块的数据库连接信息合并,返回给调用方。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值