如何用Gradle构建替换xml的内容或关键字(如applicationContext.xml)?
问题描述:
我的应用程序的applicationContext.xml与entityManagerFactory的豆定义为:如何用Gradle构建替换xml的内容或关键字(如applicationContext.xml)?
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="org.xyz" />
**<property name="dataSource" ref="poolDVLDataSource" />**
<!--<property name="dataSource" ref="poolPRDDataSource" /> -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform"
value="org.hibernate.dialect.Oracle10gDialect" />
<property name="database" value="ORACLE" />
<property name="showSql" value="false" />
</bean>
</property>
</bean>
和数据源引用作为
<bean id="poolPRDDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
....
</bean>
和
<bean id="poolDVLDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
....
</bean>
我使用了的gradle构建。根据部署环境,是否有办法将dataSource ref动态替换为“poolDVLDataSource”或“poolPRDDataSource”?
答
ReplaceRegExp ant任务应该解决您的问题。 https://ant.apache.org/manual/Tasks/replaceregexp.html
样品gradle这个下面的代码:
ant.replaceregexp(match:'existingName', replace:'newName', byline:true) {
fileset(dir: 'WebContent/WEB-INF', includes: 'applicationContext.xml')
}
答
我不会gradle这个问题是解决了,你应该在春天解决这个
你可以使用Spring的<import />
与${parameter}
使实际的文件在运行时决定。例如,你可以将你的服务配置分成两个文件。 “内部”文件可能包含您的应用程序和“外部”配置文件实现的所有服务可能包含外部配置,包括数据库连接,JMS连接,邮件服务器等,等
如:applicationContext.xml的
<context:property-placeholder/>
<import resource="classpath:internal-services.xml" />
<import resource="classpath:${environment}/external-services.xml" />
对于生产,您可以将environment=prod
作为系统属性并加载包含“真实”服务的prod/external-services.xml
。对于测试,您可以通过environment=mock
并加载mock/external-services.xml
,其中包含所有外部服务的模拟。