如何用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,其中包含所有外部服务的模拟。