我编写与API client
相关联的桌面应用程序,此API
强制设置网址值
@Value("${ig.api.domain.URL}")
private String igApiDomainURL;
上面显示的igApiDomainURL
设置在客户端api库的AbstractService.class
中,因此我无法对其进行更改。
我创建BeanConfiguration.java
,其中application.properties
加载了ig.api.domain.URL
。
BeanConfiguration.java
看起来像这样:
@Configuration
@PropertySource("application.properties")
public class BeanConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public HttpClient httpClient() {
return HttpClients.createDefault();
}
}
...而application.properties
包含:
ig.api.domain.URL=https://demo-api.ig.com/gateway/deal
我希望在riunning应用程序期间更改application.properties
中更改的URL地址(根据帐户类型更改URL地址 - DEMO / LIVE)。
有什么建议吗?
答案 0 :(得分:1)
经过长时间的讨论后,最终适用于这个非常具体的场景的是这样的事情:
为您想要的每个可能的配置文件创建属性文件,例如:
application-dev.properties
application-prod.properties
属性内容示例:
property.i.want=abcd
在创建ApplicationContext之前设置env:
System.setProperty("spring.profiles.active", "dev");
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"spring.xml"});
然后手动设置属性源,即:
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() throws IOException {
String profile = System.getProperty("spring.profiles.active");
PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
Resource resource = new ClassPathResource(String.format("application-%s.properties", profile));
Properties props = PropertiesLoaderUtils.loadProperties(resource);
pspc.setProperties(props);
pspc.setPropertySources();
return pspc;
}
但绝对不是最漂亮的解决方案。