2017-08-03 3 views
1

Mon application a applicationContext.xml avec haricot EntityManagerFactory défini comme:Comment remplacer le contenu ou le mot-clé d'un fichier XML (comme applicationContext.xml) avec Gradle build?

<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> 

et références sources de données

<bean id="poolPRDDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
.... 
</bean> 

et

<bean id="poolDVLDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
    .... 
</bean> 

J'utilise gradle pour construire. Selon l'environnement de déploiement, existe-t-il un moyen de remplacer dynamiquement le reflet dataSource par «poolDVLDataSource» ou «poolPRDDataSource»?

Répondre

1

La tâche ReplaceRegExp ant devrait résoudre votre problème. https://ant.apache.org/manual/Tasks/replaceregexp.html

Exemple de code gradle ci-dessous:

ant.replaceregexp(match:'existingName', replace:'newName', byline:true) { 
    fileset(dir: 'WebContent/WEB-INF', includes: 'applicationContext.xml') 
} 
1

Je ne serais pas résoudre ce avec gradle, vous devez résoudre ce au printemps

Vous pouvez utiliser <import /> de printemps avec un ${parameter} afin que le fichier réel est décidé à l'exécution. Par exemple, vous pourriez diviser votre configuration de service en deux fichiers. Le fichier « interne » peut contenir tous les services mis en œuvre par l'application et le fichier de configuration « externe » peut contenir des config externes, y compris les connexions de base de données, les connexions JMS, les serveurs de courrier, etc, etc.

Par exemple: applicationContext.xml

<context:property-placeholder/> 
<import resource="classpath:internal-services.xml" /> 
<import resource="classpath:${environment}/external-services.xml" /> 

Pour la production, vous pouvez passer environment=prod comme propriété système et charger le prod/external-services.xml qui contient les «vrais» services. Pour les tests, vous pouvez passer environment=mock et charger mock/external-services.xml qui contient des simulacres de tous vos services externes.