配置两个不同的数据源
1、jdbc.properties文件
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
#SQL SERVER 2000 SP4
#database=SQL Server 2000
hibernate.dialectSql=org.hibernate.dialect.SQLServerDialect
jdbc.driverClassNameSql=net.sourceforge.jtds.jdbc.Driver
jdbc.urlSql=jdbc:jtds:sqlserver://10.108.19.117:1433/air
jdbc.usernameSql=sa
jdbc.passwordSql=123456789
#Oralce
database=Oracle
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@10.108.19.117:1521:csair
jdbc.username=kongqin2
jdbc.password=p2ssword
在Spring中配置
<!-- ========================= RESOURCE DEFINITIONS ========================= -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="fileEncoding" value="UTF-8" />
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
2、DataSource配置
<bean id="dataSource" depends-on="initDataBaseManager"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass"
value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="minPoolSize">
<value>5</value>
</property>
<property name="maxPoolSize" value="30" />
<property name="initialPoolSize" value="10" />
<property name="maxIdleTime" value="60" />
<property name="acquireIncrement" value="5" />
<property name="maxStatements" value="0" />
<property name="idleConnectionTestPeriod" value="60" />
<property name="acquireRetryAttempts" value="30" />
<property name="breakAfterAcquireFailure" value="true" />
<property name="testConnectionOnCheckout" value="false" />
</bean>
<bean id="dataSourceSql"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass"
value="${jdbc.driverClassNameSql}" />
<property name="jdbcUrl" value="${jdbc.urlSql}" />
<property name="user" value="${jdbc.usernameSql}" />
<property name="password" value="${jdbc.passwordSql}" />
<property name="minPoolSize">
<value>5</value>
</property>
<property name="maxPoolSize" value="30" />
<property name="initialPoolSize" value="10" />
<property name="maxIdleTime" value="60" />
<property name="acquireIncrement" value="5" />
<property name="maxStatements" value="0" />
<property name="idleConnectionTestPeriod" value="60" />
<property name="acquireRetryAttempts" value="30" />
<property name="breakAfterAcquireFailure" value="true" />
<property name="testConnectionOnCheckout" value="false" />
</bean>
3、SessionFactory配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingLocations">
<list>
<value>classpath*:/org/jbpm/**/*.hbm.xml</value>
</list>
</property>
<property name="annotatedClasses">
<list>
<value>com.forgon.security.model.Resource</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="current_session_context_class">thread</prop>
</props>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean
class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
</entry>
</map>
</property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactorySql"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSourceSql" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialectSql}
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="current_session_context_class">thread</prop>
</props>
</property>
</bean>
4、Dao配置
<bean id="objectSqlDao"
class="com.forgon.tools.hibernate.ObjectSqlDaoImpl">
<property name="sessionFactory" ref="sessionFactorySql" />
</bean>
<bean id="objectDao"
class="com.forgon.tools.hibernate.ObjectDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
这里的Dao继承了HibernateDaoSupport。具体代码如下:
public class ObjectSqlDaoImpl extends HibernateDaoSupport implements ObjectSqlDao,
Serializable {
private static final long serialVersionUID = 1L;
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void save(Object po) {
getHibernateTemplate().save(po);
}
public void clearCache() {
getHibernateSession().flush();
getHibernateSession().clear();
}
public void evict(Object object) {
getHibernateTemplate().evict(object);
}
public void flush() {
getHibernateTemplate().flush();
}
}
5、测试用例
public class OtherDBConnetionTest extends AbstractTransactionalDataSourceSpringContextTests{
private ObjectDao objectDao;
private ObjectSqlDao objectSqlDao;
public void setObjectDao(ObjectDao objectDao) {
this.objectDao = objectDao;
}
public void setObjectSqlDao(ObjectSqlDao objectSqlDao) {
this.objectSqlDao = objectSqlDao;
}
protected String[] getConfigLocations() {
setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME);
return new String[] { "spring/*.xml"};
}
@SuppressWarnings("unchecked")
public void testOtherDBConnetion(){
String sql = "where po.name = 'admin'";
User user = (User) objectDao.getBySql(User.class.getSimpleName(), sql);
assertNotNull(user);
assertEquals("admin", user.getName());
sql = "select * from SS_USERS ";
ResultSet rs = objectSqlDao.executeSql(sql);
assertNotNull(rs);
try {
rs.next();
String name = (String)rs.getObject("name");
assertEquals("admin", name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
objectSqlDao中的executeSql方法,源码如下:
public ResultSet executeSql(String sql) {
Connection conn = getSession().connection();
PreparedStatement ps;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
分享到:
相关推荐
在Spring配置文件中,可以定义多个DataSource bean,每个bean代表一个数据库连接。例如,我们可以创建名为`primaryDataSource`和`secondaryDataSource`的bean,分别对应主库和从库。 2. **使用AOP(面向切面编程)*...
在大型系统中,可能需要配置多个数据源。Spring提供了`AbstractRoutingDataSource`,可以动态选择要使用的数据源。通过自定义实现,可以根据业务逻辑或事务上下文决定使用哪个`DataSource`。 总结,`dataSource`在...
通过Spring的配置,我们可以轻松地管理多个数据源,并根据业务逻辑进行动态切换。这通常涉及到使用`@Qualifier`注解来指定特定的数据源。 2. **Druid数据源** Druid是一个高性能、监控和扩展性极强的数据库连接池...
### Spring 加载多个配置文件详解 #### 一、引言 在现代软件开发中,Spring 框架因其强大的依赖注入(DI)和面向切面编程(AOP)能力而备受青睐。尤其在构建大型应用时,为了提高代码的可读性和可维护性,将系统...
本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储数据库连接信息的接口,它实现了JDBC规范中的`javax.sql.DataSource`接口。通过数据源,...
此外,Spring Boot还支持多数据源配置,这对于微服务架构或多数据库的应用场景非常有用。我们可以通过不同的`@Profile`注解来区分不同环境的`DataSource`,或者使用`@Primary`注解来指定默认的数据源。 在实际开发...
在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...
在Spring Boot应用中,我们经常需要处理来自多个数据源的数据,比如在开发微服务架构时,每个服务可能对应一个特定的数据源。`JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为...
本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...
在Spring Boot中,我们可以通过创建不同的`DataSource` bean来配置多个数据源。每个数据源通常会有一个对应的`JdbcTemplate`或`JpaEntityManagerFactory`。首先,我们需要在`application.yml`或`application....
本文将详细介绍如何通过配置多个Mapper扫描不同的包路径来实现多数据源的配置。 #### 二、多数据源配置背景与应用场景 在Spring Boot项目中,默认情况下通常只需要配置一个数据源,即项目的主数据源。但在某些特定...
接着,`<beans>`标签是Spring配置的根元素,它包含了所有bean的定义。在这个例子中,我们看到多个命名空间的引入: 1. `xmlns:beans` 是Spring核心配置的命名空间,用于定义bean。 2. `xmlns:xsi` 是XML Schema ...
对于需要处理多个数据库的应用,Spring支持配置多个DataSource。这需要通过配置不同的bean ID和数据源属性,以及在业务逻辑中选择合适的数据源进行操作。 7. **Spring JdbcTemplate和NamedParameterJdbcTemplate**...
`dynamic-datasource-spring-boot-starter`通过自动化配置和扩展点设计,使得开发者能够在不修改代码的情况下,轻松地在多个数据源之间切换。 **Spring Boot**是Spring框架的一个衍生项目,旨在简化Spring应用程序...
Spring 配置文件是一个或多个标准的 XML 文档,applicationContext.xml 是 Spring 的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。 在 Spring 配置文件中,主要包含了以下...
通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用服务器如Tomcat、JBoss或WebLogic中。然而,有时我们可能希望在非Web环境...
7. **多任务配置**:如果需要配置多个定时任务,只需重复上述步骤,为每个Job和Trigger创建不同的bean,并在适当的地方添加到Scheduler中。 通过以上步骤,你可以在Spring中成功配置并运行多个Quartz定时任务。记得...
要配置多个数据源,我们需要创建两个或更多的Bean,每个Bean代表一个数据源。例如,我们可以创建两个数据源Bean,分别命名为`primaryDataSource`和`secondaryDataSource`。每个Bean都需要设置相应的连接参数,如URL...
而在多数据源管理方面,Spring同样提供了灵活且强大的支持,允许开发者在一个应用程序中配置和使用多个数据源,满足了复杂业务场景下对不同数据库操作的需求。 ### Spring配置两个数据源 #### 核心概念解析 **...