在XML文件中使用占位符来放置属性文件中的值

时间:2016-02-17 04:01:03

标签: java xml spring properties xml-configuration

我想在我的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或其他任何方式进行设置吗?

感谢任何帮助。

0 个答案:

没有答案