我正在使用 PropertyPlaceholderConfigurer 在我的应用程序中加载一个属性文件,从中读取数据库详细信息并在数据源中动态替换它,如下所示。
<bean id="configJdbcProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties
</value>
</property>
</bean>
<bean id="mysqlSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="${mysql.jdbc.url}" />
<property name="user" value="${mysql.jdbc.username}" />
<property name="password" value="${mysql.jdbc.password}" /> </bean>
上面的代码按预期工作正常。问题:如果上述属性值中有任何空格,则会导致应用程序失败。
Ex: mysql.jdbc.username= root
现在在上面的示例中,用户名 root 之前有一个空格,因此我的应用程序无法连接到 DB。我接受这是人为错误,但是有没有办法在春天自动处理它或通过在春天启用某些属性来处理它。
PropertyPlaceholderConfigurer
中没有直接支持修剪值,因为它假定属性源正确。不过,介绍起来很简单。没有什么可以阻止您使用类的自定义版本。
public class MyPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
String value = super.resolvePlaceholder(placeholder, props);
return value == null ? null : value.trim();
}
}
有这样的机制。但这似乎是加载到 Spring 中的 Props 文件中属性的自动修剪尾随空格的副本
还有一个问题在Spring Jira中仍处于"未解决"状态。
https://jira.spring.io/browse/SPR-5839
希望我能帮到你。
BR