我有一个带弹簧和maven的项目。我发现使用配置文件,maven可以更改数据源的属性。但是,如果在生产中数据源使用这样的查找,如何为此执行配置文件:一个具有基本数据源,另一个具有jee查找。
<jee:jndi-lookup id="dataSourcejndi" jndi-name="jdbc/BGGDS"
default-value="null" resource-ref="true"/>
这是配置文件在pom.xml中的方式
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<hibernate.dialect>org.hibernate.dialect.HSQLDialect</hibernate.dialect>
<jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
<jdbc.url>jdbc:hsqldb:hsql://localhost/test</jdbc.url>
<jdbc.username>sa</jdbc.username>
<app.datasource>dataSource</app.datasource>
<jdbc.password />
<jdbc.isolation />
</properties>
</profile>
<profile>
<id>hudson</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<hibernate.dialect>org.hibernate.dialect.HSQLDialect</hibernate.dialect>
<jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
<jdbc.url>jdbc:hsqldb:hsql://localhost/othertest</jdbc.url>
<app.datasource>dataSource</app.datasource>
<jdbc.username>sa</jdbc.username>
<jdbc.password />
</properties>
</profile>
</profiles>
这就是春天的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<!--Datasource pruebas" -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="${jdbc.driver}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}" />
<!-- La definición del Factory de Session con Anotaciones -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="${app.datasource}" />
<property name="hibernateProperties">
<props>
<!--Pruebas
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>-->
<!--Produccion-->
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>Test.hbm.xml</value>
</list>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- Injected properties
-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
这适用于普通数据源,但如果我需要锁定怎么办?
答案 0 :(得分:1)
IMO,你应该选择两个Spring配置文件,例如data-access.xml和data-access-test.xml,并在测试环境中使用后者。当然,您可以将此方法与配置文件和过滤相结合,根据配置文件等选择一个或另一个。实际上有无限的可能性。
答案 1 :(得分:1)
几个月前我遇到了一个情况,我在应用服务器上运行了一个支持Spring的JNDI连接,以及一个支持Spring的c3p0池连接,用于同一个应用程序的桌面调试器。
为了实现这一点,我为db提供了两个独立的弹簧配置。一个用于JNDI,一个用于本地池化版本。我使用了一个单独的“父”配置,其中包含基于父配置中的过滤属性的适当配置。
长话短说,使用配置文件设置您将包含在父弹簧文件中的配置文件。
答案 2 :(得分:0)
一个简单但非常强大的选项是将不同的文件打包到您的应用程序中,即不同的Spring配置文件。