我需要知道它是否可以在 Spring 中通过结合系统属性和在 PropertyFile 上定义的自定义属性来为属性派生一个值。
我做了什么:
1) 在服务器中配置 -D 参数为:-Dapp.Env="dev"
2) 在我的 spring-config.xml 中,定义数据源详细信息如下:
<!-- DataSource configurations -->
<bean id="myDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="myDataSource" />
<property name="xaDataSourceClassName" value="${my.database.xaDriver.class}" />
<property name="xaProperties">
<props>
<prop key="URL">#{systemProperties['appEnv']}.${my.database.jdbcUrl}</prop>
<prop key="user">#{systemProperties['appEnv']}.${my.database.user}</prop>
<prop key="password">#{systemProperties['appEnv']}.${my.database.password}</prop>
</props>
</property>
<property name="maxPoolSize" value="${my.database.maxPoolSize}" />
<property name="minPoolSize" value="${my.database.minPoolSize}" />
<property name="borrowConnectionTimeout" value="60" />
<property name="maintenanceInterval" value="120" />
</bean>
3) 在我的 .properties 文件中定义以下属性: my.database.xaDriver.class=oracle.jdbc.xa.client.OracleXADataSource
my.database.initialPoolSize=2
my.database.maxPoolSize=10
my.database.minPoolSize=2
dev.my.database.jdbcUrl=jdbc:oracle:thin:@test.com:1535:myDb
dev.my.database.user=myuserid
dev.my.database.password=mypwd
4)在 spring-config.xml 中定义的 .properties 文件位置为:
<context:property-placeholder location="/WEB-INF/spring/spring-config.properties" />
我在服务器启动时得到什么:
Throwable 发生:org.springframework.beans.factory.BeanDefinitionStoreException:在 ServletContext 资源 [/WEB-INF/spring/spring-config.xml] 中定义的名称为“myDataSource”的无效 bean 定义:无法解析占位符“my.database.jdbcUrl” ' 在字符串值“#{systemProperties['appEnv']}.${my.database.jdbcUrl}”中
我也尝试过:
5) 在 .properties 文件中定义如下属性:
app.Env=dev
6)修改数据源bean配置如下:
<prop key="URL">${app.Env}.${my.database.jdbcUrl}</prop>
<prop key="user">${app.Env}.${my.database.user}</prop>
<prop key="password">${app.Env}.${my.database.password}</prop>
但是在服务器启动时,我收到相同的异常消息:
Throwable 发生:org.springframework.beans.factory.BeanDefinitionStoreException:在 ServletContext 资源 [/WEB-INF/spring/spring-config.xml] 中定义的名称为“myDataSource”的无效 bean 定义:无法解析占位符“my.database.jdbcUrl” ' 在字符串值“${app.Env}.${my.database.jdbcUrl}”中
有人可以帮我指出我可能犯的错误以及此问题的可能解决方法是什么吗?