在Spring Project中获取配置的更好实践

时间:2017-06-21 02:42:19

标签: java spring web-services

哪种做法更好?我应该在spring文件中取出我在下面的代码中使用的所有配置,这应该从一些配置文件中获取?或者直接在代码中使用它们很好吗?

String endPoint = "dsadas";  
HttpClientConfig httpClientConfig = new HttpClientConfig
                .Builder(endPoint)
                .multiThreaded(true)
                .readTimeout(50000)
                .connTimeout(60000)
                .maxTotalConnection(40)
                .build();

2 个答案:

答案 0 :(得分:2)

在这个无状态 - 短暂 - 云原生微服务的时代,你的工件应该与环境无关。这意味着既不保留代码(这是最糟糕的想法)也不保留在最终工件中的配置文件中是一个好主意。但是,如果您能够从环境变量或命令行参数或外部配置文件覆盖配置,则后者适合开发。

我建议你阅读12 factor Apphttps://content.pivotal.io/blog/beyond-the-twelve-factor-app

答案 1 :(得分:0)

好吧,您可以使用现有机制从Spring Environment获取配置。使用@Value(${configuration_key:default_value})注释很容易(假设您以某种方式注册了PropertySourcesPlaceHolderConfigurer)。 代码示例:

@Configuration
public class AppConfiguration {
    @Value("${http.client.endpoint:dsadas}")
    private String endPoint;
    @Value("${http.client.multiThreaded:true}")
    private boolean multiThreaded;
    @Value("${http.client.readTimeout:50000}")
    private int readTimeout;
    @Value("${http.client.connTimeout:60000}")
    private int connTimeout;
    @Value("${http.client.maxTotalConnection:40}")
    orivate int maxTotalConnection;

    @Bean
    private HttpClientConfig httpClientConfig() {
        return HttpClientConfig httpClientConfig = new HttpClientConfig
            .Builder(endPoint)
            .multiThreaded(multiThreaded)
            .readTimeout(readTimeout)
            .connTimeout(connTimeout)
            .maxTotalConnection(maxTotalConnection)
            .build();
    }
}

配置文件(application.properties):

http.client.endpoint=value
http.client.multiThreaded=value
http.client.readTimeout=value
http.client.connTimeout=value
http.client.maxTotalConnection=value

Spring允许您使用不同类型的配置,例如命令行参数,系统属性,配置文件,Spring Cloud Config等。此外,配置可以是配置文件和环境特定的。有关详情,请访问:Properties & configurationExternalized Configuration