在我的一个Spring Boot应用程序中,我有一个控制器,该控制器需要从application.yml中读取以访问外部API。我在外部API中进行了组织设置,类似于github组织,并且每个组织都具有自己的客户端ID和密钥。
我的application.yml看起来像这样。
organization:
abc:
client:
clientId: f29e347add73
clientSecret: dad2404e63ec4cd
xyz:
client:
clientId: 0884340cf3e793
clientSecret: a26ff0119d907e9
目前,我可以像这样在控制器中获取属性值。
@Value("${organization.abc.client.clientId}")
private String abcClientId;
@Value("${organization.abc.client.clientSecret}")
private String abcClientSecret;
但是我需要做的是,如果不是对abc
的请求,而是对abc
的配置进行硬编码,而当对xyz
进行配置时,则是针对xyz
的配置。 arr2
被拾取。对于我不断添加到application.yml文件中的任意数量的组织来说都是相同的。
请帮助我实现该目标。
答案 0 :(得分:0)
如果您可以按以下方式重写applicaiotn.yml
,则可以使用@ConfigurationProperties
将其读入对象列表。
organization:
list:
-
name: abc
client:
clientId: f29e347add73
clientSecret: dad2404e63ec4cd
-
name: xyz
client:
clientId: 0884340cf3e793
clientSecret: a26ff0119d907e9
创建一个类以将属性映射到对象列表:
@Service
@ConfigurationProperties(prefix="organization")
public class ConfigurationService {
private List<Org> list = new ArrayList<>();
//getters and setters
public static class Org {
private String name;
private Client client;
//getters and setters
}
public static class Client {
private String clientId;
private String clientSecret;
//getter and setter
}
}
现在,您可以像...一样访问此列表
@Autowired
ConfigurationService configurationService;
答案 1 :(得分:-1)
您可以像这样注入Environment(默认情况下由Spring Boot初始化):
@Autowired
private Environment env;
然后像这样使用它:
env.getProperty("my-property")