有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重写应用程序中的值。性质

我编写与API client连接的桌面应用程序,这个API强制设置URL值

@Value("${ig.api.domain.URL}")
private String igApiDomainURL;

上面显示的设置igApiDomainURL位于客户机api库的AbstractService.class中,因此我无法更改它

我创建了BeanConfiguration.java,它加载定义了ig.api.domain.URLapplication.properties

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)

有什么建议吗


共 (1) 个答案

  1. # 1 楼答案

    经过长时间的讨论,这个非常具体的场景的最终效果是:

    为每个可能的配置文件创建一个属性文件,如:

    application-dev.properties
    application-prod.properties
    

    属性内容示例:

    property.i.want=abcd
    

    在创建ApplicationContext之前设置环境:

    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;
    }
    

    但这绝对不是最漂亮的解决方案