gpt4 book ai didi

java - PropertySourcesPlaceholderConfigurer 和 SpEL?

转载 作者:行者123 更新时间:2023-12-01 10:07:50 25 4
gpt4 key购买 nike

由于我们相当复杂的 properties 文件设置,我们不能简单地使用 @PropertySource

这是属性文件:

connection.http.connectTimeout=15000
#connection.http.readTimeout=${connection.http.connectTimeout}
connection.http.readTimeout=#{30*1000}

第二行仍然有效,并将 readTimeout 设置为 15000,但第三行到位后,该值仅为 0。

bean 类:

@Component
@ConfigurationProperties("connection")
public class ConnectionConfig {

@NestedConfigurationProperty
private ConnectionSourceConfig http;

public ConnectionSourceConfig getHttp() {
return http;
}

public void setHttp(ConnectionSourceConfig http) {
this.http = http;
}

}

public class ConnectionSourceConfig {

private long connectTimeout;

private long readTimeout;

public long getConnectTimeout() {
return connectTimeout;
}

public void setConnectTimeout(long connectTimeout) {
this.connectTimeout = connectTimeout;
}

public long getReadTimeout() {
return readTimeout;
}

public void setReadTimeout(long readTimeout) {
this.readTimeout = readTimeout;
}

}

使用 PropertySourcesPlaceholderConfigurer 似乎会阻止 SpEL 工作:

@Configuration
public class BaseAppConfig {

@Bean
public static PropertySourcesPlaceholderConfigurer properties(Environment environment) throws IOException {
String env = getEnvProperty(environment);
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setLocations(getPropertiesFiles(env));
configurer.setIgnoreResourceNotFound(true);
return configurer;
}

我尝试了更高级的 PropertySourcesPlaceholderConfigurer,但是 convertPropertyValue() 从未被调用:

    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer() {

@Override
protected String convertPropertyValue(String originalValue) {
System.out.println("Parse " + originalValue);
return super.convertPropertyValue(originalValue);
}

};

我试图研究 Spring 如何完成它的工作,它似乎可以与 PropertyResolver 一起使用。但是,我不知道如何将其编织到其中。

但是,也许我在 Spring 的处理生命周期方面犯了一个错误......

最佳答案

在属性文件方面,# 被视为注释 block 。这样做时,您的属性文件最终会将属性设置为空。

connection.http.readTimeout=#{30*1000}呈现为connection.http.readTimeout=,因为#之后的所有内容都会被忽略。

关于java - PropertySourcesPlaceholderConfigurer 和 SpEL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36327374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com