我的应用程序有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”?
答案 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}},其中包含所有外部服务的模拟。