如何使用Gradle构建替换xml的内容或关键字(如applicationContext.xml)?

时间:2017-08-03 19:33:01

标签: gradle replace ant build.gradle applicationcontext

我的应用程序有applicationContext.xml,其entityManagerFactory bean定义为:

<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引用动态替换为“poolDVLDataSource”或“poolPRDDataSource”?

2 个答案:

答案 0 :(得分:1)

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')
}

答案 1 :(得分:1)

我不会用gradle解决这个问题,你应该在春天解决这个问题

您可以将spring ${parameter}<context:property-placeholder/> <import resource="classpath:internal-services.xml" /> <import resource="classpath:${environment}/external-services.xml" /> 一起使用,以便在运行时确定实际文件。例如,您可以将服务配置拆分为两个文件。 “内部”文件可以包含应用程序实现的所有服务,“外部”配置文件可以包含外部配置,包括数据库连接,JMS连接,邮件服务器等等。

例如:applicationContext.xml

environment=prod

对于生产,您可以将prod/external-services.xml作为系统属性传递,并加载包含“真实”服务的environment=mock。对于测试,您可以传递mock/external-services.xml并加载{{1}},其中包含所有外部服务的模拟。