我想在我的xml文件中有一个palceholder,它从属性文件中放置值。
SystemProperty.xml 文件只是一个全局系统配置文件,而不是任何类型的弹簧配置,看起来像
<?xml version="1.0" encoding="UTF-8"?>
<PropertyList>
<Property>
<Name>CommandTimeout</Name>
<Value>60</Value>
<Description>Setting the timeout(in seconds)</Description>
<DefaultValue></DefaultValue>
</Property>
<Property>
<Name>Address</Name>
<Value>${server.IP}</Value>
<Description>ip:port</Description>
<DefaultValue></DefaultValue>
</Property>
</PropertyList>
正在使用XMLConfiguration bean加载
<bean
id="xmlConfiguration"
class="org.apache.commons.configuration.XMLConfiguration"
lazy-init="true">
<constructor-arg type="java.lang.String">
<value>SystemProperty.xml</value>
</constructor-arg>
<property name="expressionEngine">
<bean class="org.apache.commons.configuration.tree.xpath.XPathExpressionEngine" />
</property>
</bean>
并在我的代码中使用它,如下所示
@Autowired
@Qualifier("xmlConfiguration")
XMLConfiguration xmlConfiguration;
但是, $ {server.IP} 占位符不起作用。
另一方面,对于spring配置xml,我可以这样做。例如,我有一个 Scheduler.xml ,它是Quartz配置xml,如下所示。
<property name="quartzProperties">
<props>
<prop key="org.quartz.jobStore.dataSource">PostgreSQLQuartzDataSource</prop>
<prop key="org.quartz.dataSource.PostgreSQLQuartzDataSource.driver">org.postgresql.Driver</prop>
<prop key="org.quartz.dataSource.PostgreSQLQuartzDataSource.URL">jdbc:postgresql://${scheduler.db.host}:${scheduler.db.port}/${scheduler.db.database}</prop>
<prop key="org.quartz.dataSource.PostgreSQLQuartzDataSource.user">${scheduler.db.username}</prop>
<prop key="org.quartz.dataSource.PostgreSQLQuartzDataSource.password">${scheduler.db.password}</prop>
<prop key="org.quartz.dataSource.PostgreSQLQuartzDataSource.maxConnections">10</prop>
...
</props>
</property>
application.properties 文件如下
# Quartz scheduler database resource
scheduler.db.host=127.0.0.1
scheduler.db.port=5432
scheduler.db.database=scheduler
scheduler.db.username=test
scheduler.db.password=test
# Server settings
server.IP=192.168.111.12
使用PropertyPlaceholderConfigurer bean:
<bean
id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:application.properties</value>
</list>
</property>
</bean>
最重要的是导入SpringApplication-context.xml中的Scheduler.xml
<import resource="Scheduler.xml" />
是否可以将属性导入普通的XML文件以使用占位符?我可以用XMLConfiguration或其他任何方式进行设置吗?
感谢任何帮助。