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



哪个是更好的做法?我是否应该在 spring 文件中取出我在下面的代码中使用的所有配置,这些配置应该从某个配置文件中获取?或者直接在代码中使用它们就可以了?

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

在这个无状态 - 短暂 - 云原生微服务的时代,你的项目应该与环境无关。这意味着,无论是保留代码(这是最糟糕的主意(还是保留可能最终出现在最终工件中的配置文件都是一个好主意。但是,如果您能够从环境变量、命令行参数或外部配置文件覆盖配置,那么后者对于开发来说就很好了。

我建议你阅读 12 因素应用程序 , https://content.pivotal.io/blog/beyond-the-twelve-factor-app

好吧,您可以使用现有的机制从 Spring 环境中获取配置。这很容易使用@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 云配置等。此外,配置可以是配置文件和环境。更多信息见:属性和配置,外部化配置。

相关内容

  • 没有找到相关文章

最新更新