gpt4 book ai didi

java - 当使用不同的前缀和相同的值时,ConfigurationProperties 不起作用

转载 作者:行者123 更新时间:2023-11-30 01:42:51 25 4
gpt4 key购买 nike

我有以下 yaml-property 文件:

myPrefix: 
value: Hello
myPrefix2:
value: World

还有两个类

@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix")
@Component
@Getter
@Setter
public class ViewUsers {
private String value;
}

@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix2")
@Component
@Getter
@Setter
public class ManageUsers {
private String value;
}

然后注入(inject)null。或者,如果我尝试使用@Value,则仅检索最新值,即最后一个值(世界),前面的值始终被忽略。

最佳答案

尝试以下方法:

  1. 从配置属性(ViewUsersManageUsers)中删除 @Component
  2. 请改用以下结构:
@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix")
public class ViewUsers {
private String value; // getter, setter
}

@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix2")
public class ManageUsers {
private String value; // getter, setter
}

@Configuration
@EnableConfigurationProperties({ViewUsers.class, ManageUsers.class}
public class MySampleConfiguration {

... beans here...
}

还要确保 Lombok 注释按预期工作(尝试仅在 POC 中不使用 lombok)。

更新1

作为@M。 Deinum 善意地指出,像这样的 PropertySource 不适用于 yaml 文件。

您可以尝试以下解决方法:

@Configuration
@PropertySource(name = "someName", value = "classpath:foo.yaml", factory = YamlPropertySourceFactory.class)
public class MyConfig {
}


import org.springframework.boot.env.YamlPropertySourceLoader;
public class YamlPropertySourceFactory implements PropertySourceFactory {

@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
final List<PropertySource<?>> load = new YamlPropertySourceLoader().load(name, resource.getResource());
return load.get(0);
}
}

关于java - 当使用不同的前缀和相同的值时,ConfigurationProperties 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59352477/

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