gpt4 book ai didi

java - @ConfigurationProperties 不使用 PropertySourcesPlaceholderConfigurer

转载 作者:行者123 更新时间:2023-11-30 05:43:03 28 4
gpt4 key购买 nike

PropertySourcesPlaceholderConfigurer 适用于我的 @Value,但不用于以下广告数据源配置

@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}

我自定义了 PropertySourcesPlaceholderConfigurer 来解码配置文件中的密码,但解码功能不会在该位置触发,而在其他位置则有效。可以请您指教吗?

最佳答案

默认情况下,Spring 将使用简单/非包装的 ConfigurationPropertySource,而不是更复杂的 PropertySourcesPlaceholderConfigurer,后者保存多个 PropertySource

可以在 DataSourceBuilder 本身中找到示例

private void bind(DataSource result) {
ConfigurationPropertySource source = new MapConfigurationPropertySource(this.properties);
ConfigurationPropertyNameAliases aliases = new ConfigurationPropertyNameAliases();
aliases.addAliases("url", "jdbc-url");
aliases.addAliases("username", "user");
Binder binder = new Binder(source.withAliases(aliases));
binder.bind(ConfigurationPropertyName.EMPTY, Bindable.ofInstance(result));
}

对于该代码段,通常使用 DataSourceProperties Bean 填充 this.properties,它是一个 @ConfigurationProperties > 带注释的类

@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {
<小时/>

问题是,@ConfigurationProperties 按 1:1 映射到属性文件,这是非常固执己见的。
@Value 是一个不同的野兽。

<小时/>

我在 this 中解决了完全自定义的实现回答。
您可能会发现它很有值(value)。

关于java - @ConfigurationProperties 不使用 PropertySourcesPlaceholderConfigurer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338016/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com