Ssh多数据源.docx
- 文档编号:8766471
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:10
- 大小:17.77KB
Ssh多数据源.docx
《Ssh多数据源.docx》由会员分享,可在线阅读,更多相关《Ssh多数据源.docx(10页珍藏版)》请在冰豆网上搜索。
Ssh多数据源
Ssh多数据源解决方案
李万鸿
Ssh多数据源是个常见的问题,本人根据网上的资料,采用目前最先进的技术,经过调试解决了这个问题,可以连多个端口的多个模式的多张表。
主要用到spring3的动态数据源技术,系统只有一个sessionFactory,用到某数据源时,用一条语句指定此数据源即可。
各dataSource采用com.mchange.v2.c3p0.ComboPooledDataSource,c3p0提供连接池,不用每次连接数据库,大大提高效率。
系统用到的是国产最先进的达梦数据库,配置文件如下:
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance"xmlns: context="http: //www.springframework.org/schema/context" xmlns: aop="http: //www.springframework.org/schema/aop"xmlns: tx="http: //www.springframework.org/schema/tx" xsi: schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd http: //www.springframework.org/schema/aop http: //www.springframework.org/schema/aop/spring-aop-3.0.xsd http: //www.springframework.org/schema/tx http: //www.springframework.org/schema/tx/spring-tx-3.0.xsd http: //www.springframework.org/schema/context http: //www.springframework.org/schema/context/spring-context-3.0.xsd"> --开启注解处理器--> annotation-config/> --定义使用C3P0连接池的数据源--> destroy-method="close"> --指定连接数据库的JDBC驱动--> --连接数据库所用的URL--> dm: //192.168.1.250: 5236 --连接数据库的用户名--> --连接数据库的密码--> --设置数据库连接池的最大连接数--> --设置数据库连接池的最小连接数--> --设置数据库连接池的初始化连接数--> --设置数据库连接池的连接的最大空闲时间,单位为秒--> --定义使用C3P0连接池的数据源(基础库数据源)--> destroy-method="close"> --指定连接数据库的JDBC驱动--> --连接数据库所用的URL--> dm: //192.168.1.250: 5237 --连接数据库的用户名--> --连接数据库的密码--> --设置数据库连接池的最大连接数--> --设置数据库连接池的最小连接数--> --设置数据库连接池的初始化连接数--> --设置数据库连接池的连接的最大空闲时间,单位为秒--> --定义使用C3P0连接池的数据源(测试数据源)--> destroy-method="close"> --指定连接数据库的JDBC驱动--> --连接数据库所用的URL--> dm: //192.168.1.250: 5238 --连接数据库的用户名--> --连接数据库的密码--> --设置数据库连接池的最大连接数--> --设置数据库连接池的最小连接数--> --设置数据库连接池的初始化连接数--> --设置数据库连接池的连接的最大空闲时间,单位为秒--> --通过key-value的形式来关联数据源--> --定义Hibernate的SessionFactory--> class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> --依赖注入上面定义的数据源dataSource--> --注册Hibernate的ORM映射文件--> --设置Hibernate的相关属性--> --设置Hibernate的数据库方言--> --设置Hibernate是否在控制台输出SQL语句,开发调试阶段通常设为true--> --设置Hibernate一个提交批次中的最大SQL语句数--> --定义Hibernate的事务管理器HibernateTransactionManager--> class="org.springframework.orm.hibernate3.HibernateTransactionManager"> --依赖注入上面定义的sessionFactory--> --定义一个事务通知txAdvice,配置事务的传播特性--> adviceid="txAdvice"transaction-manager="transactionManager"> attributes> --所有以browse、list、load、get及is开头的业务逻辑方法均不需要事务控制且只读--> methodname="browse*"propagation="NOT_SUPPORTED" read-only="true"/> methodname="list*"propagation="NOT_SUPPORTED" read-only="true"/> methodname="load*"propagation="NOT_SUPPORTED" read-only="true"/> methodname="get*"propagation="NOT_SUPPORTED" read-only="true"/> methodname="is*"propagation="NOT_SUPPORTED" read-only="true"/> --设置所有方法均进行事务控制,如果当前没有事务,则新建一个事务--> methodname="*"propagation="REQUIRED"/> attributes> advice> --定义一个事务通知txAdvice,配置事务的传播特性--> --装配HibernateTemplate实例--> --装配通用数据库访问类BaseDAOImpl--> Book3.hbm.xml文件如下: xmlversion="1.0"encoding="utf-8"? > DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN" " DynamicDataSource.action//动态分配数据源 packagemon; importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; publicclassDynamicDataSourceextendsAbstractRoutingDataSource{ @Override protectedObjectdetermineCurrentLookupKey(){ returnDataSourceContextHolder.getProxType(); } } DataSourceContextHolder.action//设置数据源 packagemon; publicclassDataSourceContextHolder{ publicstaticfinalStringDATA_SOURCE_A="dataSourceA"; publicstaticfinalStringDATA_SOURCE_B="dataSourceB"; publicstaticfinalStringDATA_SOURCE_C="dataSourceC"; privatestaticfinalThreadLocal publicstaticvoidsetProxType(StringcustomerType){ contextHolder.set(customerType); } publicstaticStringgetProxType(){ returncontextHolder.get(); } publicstaticvoidclearProxType(){ contextHolder.remove(); } } Tools.action//指定数据源 publicstaticvoidsetDataSource(inth){ if(h==1) DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_A); elseif(h==2) DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_B); elseif(h==3) DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_C); } 在service文件的各个方法中指定数据源。 publicList Tools.setDataSource(3); List System.out.println("booksize="+l.size()); returnl; } 在acton文件中调用service的browseEmployee()方法。 大功告成,呵呵! 2013-04-01
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ssh 多数