1、Ssh多数据源 Ssh多数据源解决方案 李万鸿Ssh多数据源是个常见的问题,本人根据网上的资料,采用目前最先进的技术,经过调试解决了这个问题,可以连多个端口的多个模式的多张表。主要用到spring3的动态数据源技术,系统只有一个sessionFactory,用到某数据源时,用一条语句指定此数据源即可。各dataSource采用com.mchange.v2.c3p0.ComboPooledDataSource,c3p0提供连接池,不用每次连接数据库,大大提高效率。系统用到的是国产最先进的达梦数据库,配置文件如下: dm.jdbc.driver.DmDriver jdbc:dm:/192.168.
2、1.250:5236 sysdba 222 20 2 2 20 dm.jdbc.driver.DmDriver jdbc:dm:/192.168.1.250:5237 sysdba 222 20 2 2 20 dm.jdbc.driver.DmDriver jdbc:dm:/192.168.1.250:5238 sysdba 222 20 2 2 20 com/hjzbjcxcyw/po/test/liwh/Book3.hbm.xml com/hjzbjcxcyw/po/test/liwh/Book.hbm.xml com/hjzbjcxcyw/po/test/liwh/Department.
3、hbm.xml com/hjzbjcxcyw/po/test/liwh/Employee.hbm.xml com/hjzbjcxcyw/po/test/liwh/Bookb.hbm.xml false org.hibernate.dialect.DmDialect true 50 Book3.hbm.xml文件如下:!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN (liwh是模式名,BOOK3是表名) DynamicDataSource.action/动态分配数据源package mon;im
4、port org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource Override protected Object determineCurrentLookupKey() return DataSourceContextHolder.getProxType(); DataSourceContextHolder.action/设置数据源package mon;public class
5、DataSourceContextHolder public static final String DATA_SOURCE_A = dataSourceA; public static final String DATA_SOURCE_B = dataSourceB; public static final String DATA_SOURCE_C = dataSourceC; private static final ThreadLocal contextHolder = new ThreadLocal(); public static void setProxType(String cu
6、stomerType) contextHolder.set(customerType); public static String getProxType() return contextHolder.get(); public static void clearProxType() contextHolder.remove(); Tools.action/指定数据源public static void setDataSource(int h) if(h=1) DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SO
7、URCE_A); else if(h=2) DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_B); else if(h=3) DataSourceContextHolder.setProxType(DataSourceContextHolder.DATA_SOURCE_C); 在service文件的各个方法中指定数据源。public List browseEmployee() Tools.setDataSource(3); List l = dao.listAll(Employee); System.out.println(book size= + l.size(); return l; 在acton文件中调用service的browseEmployee()方法。 大功告成,呵呵! 2013-04-01
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1