配置两个不同的数据源
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;
}
分享到:
相关推荐
一个springboot的多数据配置,从mapper到controller完整的一个业务流程
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
基于Spring实现的动态数据源框架使用方法如下:配置文件在springboot的配置文件中配置多个数据源其中prefix = "spring.slavedatasource" 的配置文件为从库,datasource为主库spring.datasource.url=jdbc:mysql://...
使用Liquibase的Spring Boot多个数据源多个数据源您需要向yaml配置文件中添加几个数据源定义。 datasource: primary: url: jdbc:mysql://localhost/primary username: root driver-class-name: ...
首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。 其次,实现简单,易于维护。这个方案虽然我说...
在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...
3, application.yml中配置了双数据源,根据需要可以加多个数据源,同时要在datasource包中新建数据源配置,参考那两个配置。 4, 启动项目,测试接口在DataSourceController中,只用注入相关的bean就能使用。 5, 使用...
多个DataSource JPA配置这支持轻松注册用于多数据库JPA的所有必需位。 它与Spring Boot的现有DataSource配置机制一起使用。 假设您有一个来自的新生成的Spring Boot项目,其中选择了JDBC数据库驱动程序(在本例中为...
一个基于springboot的快速集成多数据源的启动器简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk 1.7 +,SpringBoot 1.4.x 1.5.x 2.xx。文件| 文献资料|特性...
你可以在 props 标签内配置多个 prop 标签. 我们将在后面编写 com.ideawu.HelloController 类. 上面, 我们在 web.xml 文件中告诉 ContextLoaderListener, 我们还有另外两个配置文件 /WEB-INF/database.xml 和 /...
在测试gateway负载均衡时可以启动单个项目的多个实例,具体方式如下: 1、项目启动类右键run as->run configurations..,打开配置框。 2、java application右键new,打开新建窗口。 3、顶部tab选中Main,在name中...
请自行修改com/resources/datasource.properties中数据库配置,Demo中配置的两个数据源,一个是Mysql,一个是Oracle。 运行之前请自行建立数据库的表。
Spring 动态切换 数据源 可同事在多个数据源中切换
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例...多数Spring Boot应用只需要很少的Spring配置。 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Sprin
处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 ...
相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题,并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换,...
例如在一个spring和Mybatis的框架的项目中,我们在spring配置中往往是配置一个dataSource来连接数据库,然后绑定给sessionFactory,在dao层代码中再指定sessionFactory来进行数据库操作。 正如上图所示,每一块...
9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring ...
在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...