Hibernate的多数据源多数据库
发布日期:2021-09-30 18:11:03 浏览次数:11 分类:技术文章

本文共 3515 字,大约阅读时间需要 11 分钟。

基于SPRING+HIBERNATE的数据库的实现多租户的数据库选择和数据源路由

applicationContext.xml

classpath:jdbc.properties
classpath:hibernate.properties
com.zhenjw.oa.**.entity
${hibernate.dialect}
${hibernate.show_sql}
${hibernate.format_sql}
${hibernate.use_sql_comments}
${hibernate.autoreconnect}
${hibernate.jdbc.fetch_size}
${hibernate.jdbc.batch_size}
${hibernate.cache.use_second_level_cache}
${hibernate.cache.use_query_cache}
${hibernate.cache.region.factory_class}

 

java源代码

 

package com.zhenjw.db;import java.sql.Connection;import java.sql.SQLException;import java.util.HashMap;import java.util.Map;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource{	private Map dataSourceMap=new HashMap();		@Override	protected Object determineCurrentLookupKey() {		// TODO Auto-generated method stub		//数据源的选择,根据自己的业务修改具体的实现,是返回数据源的key		String sp = SpObserver.getSp();				return sp;	}	@Override	public Connection getConnection() throws SQLException {		// TODO Auto-generated method stub		Connection a= super.getConnection();		//用于选择数据库的逻辑,基于自己的业务规则进行修改		a.prepareStatement("use oa_2 ").executeUpdate();		return a;	}		}

 

package com.zhenjw.db;public class SpObserver {	 private static ThreadLocal local = new ThreadLocal();	 	 private static String sp;	 	 public static void putSp(String sp) {		 local.set(sp);	 } 	 public static String getSp() { 		 return (String)local.get();    	 } 	 }

 

package test.db;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zhenjw.db.BaseDaoImpl;import com.zhenjw.db.SpObserver;import com.zhenjw.oa.wzaccount.entity.WzAccount;public class TestDataSource {	//private static ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext-base.xml");		private static ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext-base2.xml");		public static void main(String[] args) {		// TODO Auto-generated method stub				SpObserver.putSp("kdataSource2");				BaseDaoImpl baseDao=ac.getBean(BaseDaoImpl.class);				System.out.println(baseDao);		WzAccount account=new WzAccount("zhenjw3");		baseDao.create(account);				System.out.println("Over");	}}

 

DAO层按hibernate的普通调用方式就可以了。结合具体的项目具体的实现有时间再细化,已经测试过可以向不同的数据源不同的数据库中增加数据。其它的功能应该也没有问题。

转载地址:https://blog.csdn.net/iteye_10343/article/details/82671254 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java中使用Jedis操作Redis
下一篇:mysql中的跨库关联查询同台机器上的不同的库

发表评论

最新留言

不错!
[***.144.177.141]2024年03月20日 18时14分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java布局管理器空布局_Java图形化界面设计——布局管理器之null布局(空布局)... 2019-04-21
java gas station_LeetCode – 774. Minimize Max Distance to Gas Station 2019-04-21
java项目无法加载到tomcat_eclipse+tomcat添加项目进来无法启动tomcat 2019-04-21
后缀树建立 java_实用算法实现-第 8 篇后缀树和后缀数组 [2 最长公共子串] 2019-04-21
java网络编程期末试题_java网络编程面试题【其中一小部分】 2019-04-21
estore java_estore2 - WEB源码|JSP源码/Java|源代码 - 源码中国 2019-04-21
java如何做表单校验_微信小程序实现表单校验功能 2019-04-21
matlab dwt2(),MATLAB小波变换指令及其功能介绍(超级有用) 2019-04-21
php sequelize,egg.js整合数据库ORM框架Sequelize 2019-04-21
php同时打开2个数据库,thinkphp3.2同时连接两个数据库的简单方法 2019-04-21
centos 开发php扩展,centos 安装php扩展redis 2019-04-21
php+跑buth,php 中函数获取可变参数的方法, 这个语法有点像 golang 语言中的 2019-04-21
cms 单点登录 php,Yii2 中实现单点登录的方法 2019-04-21
oracle自己运行,创建Oracle自动执行Job 2019-04-21
oracle报错00020,oracle启动 ORA-00020: maximum number of processes (%s) exceeded错误 2019-04-21
chmod 赋权所有_chmod 权限 命令详细用法 2019-04-21
html代码翻译_[译]您知道 HTML 的键盘标签吗? 2019-04-21
html抽奖代码_JavaScript高手之路:封装抽奖效果 2019-04-21
hadoop 3.3 一直停留在running wordcount_蛋价持续下跌,今日跌破3.3元大关!深秋季节价格还能反弹吗?... 2019-04-21
的流程图做完后如何保存_2019超火的半永久眉是哪款?做完后我们如何护理?... 2019-04-21