Ssh多数据源.docx

上传人:b****6 文档编号:8766471 上传时间:2023-02-01 格式:DOCX 页数:10 大小:17.77KB
下载 相关 举报
Ssh多数据源.docx_第1页
第1页 / 共10页
Ssh多数据源.docx_第2页
第2页 / 共10页
Ssh多数据源.docx_第3页
第3页 / 共10页
Ssh多数据源.docx_第4页
第4页 / 共10页
Ssh多数据源.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Ssh多数据源.docx

《Ssh多数据源.docx》由会员分享,可在线阅读,更多相关《Ssh多数据源.docx(10页珍藏版)》请在冰豆网上搜索。

Ssh多数据源.docx

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驱动-->

dm.jdbc.driver.DmDriver

--连接数据库所用的URL-->

jdbc:

dm:

//192.168.1.250:

5236

--连接数据库的用户名-->

sysdba

--连接数据库的密码-->

222

--设置数据库连接池的最大连接数-->

20

--设置数据库连接池的最小连接数-->

2

--设置数据库连接池的初始化连接数-->

2

--设置数据库连接池的连接的最大空闲时间,单位为秒-->

20

--定义使用C3P0连接池的数据源(基础库数据源)-->

destroy-method="close">

--指定连接数据库的JDBC驱动-->

dm.jdbc.driver.DmDriver

--连接数据库所用的URL-->

jdbc:

dm:

//192.168.1.250:

5237

--连接数据库的用户名-->

sysdba

--连接数据库的密码-->

222

--设置数据库连接池的最大连接数-->

20

--设置数据库连接池的最小连接数-->

2

--设置数据库连接池的初始化连接数-->

2

--设置数据库连接池的连接的最大空闲时间,单位为秒-->

20

--定义使用C3P0连接池的数据源(测试数据源)-->

destroy-method="close">

--指定连接数据库的JDBC驱动-->

dm.jdbc.driver.DmDriver

--连接数据库所用的URL-->

jdbc:

dm:

//192.168.1.250:

5238

--连接数据库的用户名-->

sysdba

--连接数据库的密码-->

222

--设置数据库连接池的最大连接数-->

20

--设置数据库连接池的最小连接数-->

2

--设置数据库连接池的初始化连接数-->

2

--设置数据库连接池的连接的最大空闲时间,单位为秒-->

20

--通过key-value的形式来关联数据源-->

--定义Hibernate的SessionFactory-->

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

--依赖注入上面定义的数据源dataSource-->

--注册Hibernate的ORM映射文件-->

com/hjzbjcxcyw/po/test/liwh/Book3.hbm.xml

com/hjzbjcxcyw/po/test/liwh/Book.hbm.xml

com/hjzbjcxcyw/po/test/liwh/Department.hbm.xml

com/hjzbjcxcyw/po/test/liwh/Employee.hbm.xml

com/hjzbjcxcyw/po/test/liwh/Bookb.hbm.xml

--设置Hibernate的相关属性-->

false

--设置Hibernate的数据库方言-->

org.hibernate.dialect.DmDialect

--设置Hibernate是否在控制台输出SQL语句,开发调试阶段通常设为true-->

true

--设置Hibernate一个提交批次中的最大SQL语句数-->

50

 

--定义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"

"

(liwh是模式名,BOOK3是表名)

 

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";

privatestaticfinalThreadLocalcontextHolder=newThreadLocal();

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文件的各个方法中指定数据源。

publicListbrowseEmployee(){

Tools.setDataSource(3);

Listl=dao.listAll("Employee");

System.out.println("booksize="+l.size());

returnl;

}

在acton文件中调用service的browseEmployee()方法。

大功告成,呵呵!

2013-04-01

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1