我的应用程序上下文中有以下bean:
<bean id="httpClient" factory-method="createHttpClient" class="com.http.httpclient.HttpClientFactory">
<constructor-arg>
<bean id="httpConfig" class="com.http.httpclient.HttpClientParamsConfigurationImpl">
<constructor-arg value="httpclient.properties"/>
</bean>
</constructor-arg>
</bean>
其中httpclient.properties
是我的属性文件的名称。我在HttpClientParamsConfigurationImpl
中使用此参数来读取文件(不要过多地考虑错误处理):
public HttpClientParamsConfigurationImpl(String fileName) {
try(InputStream inputStream = new FileInputStream("resource/src/main/properties/" + fileName)) {
properties.load(inputStream);
} catch (IOException e) {
LOG.error("Could not find properties file");
e.printStackTrace();
}
}
有没有办法传递bean中的整个文件位置,所以在创建resource/src/main/properties
时我不必添加路径InputStream
?
我已尝试使用classpath:httpclient.properties
,但它无法正常使用。
答案 0 :(得分:3)
您的代码错误,文件位于类路径中(src/main/resources
被添加到类路径中,并且其中的文件被复制到类路径的根目录。在您的情况下,在名为{{1}的子目录中})。而不是properties
我建议您改用String
或Resource
。
Properties
然后在您的配置中,您只需编写以下内容:
public HttpClientParamsConfigurationImpl(Resource res) {
try(InputStream inputStream = res.getInputStream()) {
properties.load(inputStream);
} catch (IOException e) {
LOG.error("Could not find properties file");
e.printStackTrace();
}
}
或者更好的是甚至不用加载属性,只需将它们传递给构造函数,让Spring为你做所有的硬加载。
<bean id="httpClient" factory-method="createHttpClient" class="com.http.httpclient.HttpClientFactory">
<constructor-arg>
<bean id="httpConfig" class="com.http.httpclient.HttpClientParamsConfigurationImpl">
<constructor-arg value="classpath:properties/httpclient.properties"/>
</bean>
</constructor-arg>
</bean>
然后使用public HttpClientParamsConfigurationImpl(final Properties properties) {
this.properties=properties
}
加载属性并简单地为构造函数引用它。
util:properties
最后一个选项可以保持您的代码清洁,并使您免于加载等。