哪个是更好的做法?我是否应该在 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 云配置等。此外,配置可以是配置文件和环境。更多信息见:属性和配置,外部化配置。