现有一个项目,采用sping+struts2+hibernate开发。有多个数据库,数据库中的表的结构完全相同。不同的用户登录后,连接到相应的数据库。现在有一问题,就是如何在hibernate中配置数据库链接?
如果在hibernate中配置多数据库链接,该怎么配置?
hibernate连接多数据库,同样表结构的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- iteye_15772 2010-08-06 15:58关注
如果你用spring的话,可以用下面的饿配置:
<!-- 配置多数据源 --><bean id="dataSource0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.default.jdbc.driverClassName}" /> <property name="url" value="${db.default.jdbc.url}" /> <property name="username" value="${db.default.jdbc.username}" /> <property name="password" value="${db.default.jdbc.password}" /> <property name="initialSize" value="${db.default.dbcp.initialSize}" /> <property name="maxIdle" value="${db.default.dbcp.maxIdle}" /> <property name="minIdle" value="${db.default.dbcp.minIdle}" /> <property name="maxActive" value="${db.default.dbcp.maxActive}" /> <property name="logAbandoned" value="${db.default.dbcp.logAbandoned}" /> <property name="removeAbandoned" value="${db.default.dbcp.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${db.default.dbcp.removeAbandonedTimeout}" /> <property name="maxWait" value="${db.default.dbcp.maxWait}" /> <property name="validationQuery" value="${db.default.dbcp.validationQuery}" /> <property name="testOnBorrow" value="${db.default.dbcp.testOnBorrow}" /> <property name="testOnReturn" value="${db.default.dbcp.testOnReturn}" /> <property name="testWhileIdle" value="${db.default.dbcp.testWhileIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${db.default.dbcp.timeBetweenEvictionRunsMillis}" /> <property name="numTestsPerEvictionRun" value="${db.default.dbcp.numTestsPerEvictionRun}" /> <property name="minEvictableIdleTimeMillis" value="${db.default.dbcp.minEvictableIdleTimeMillis}" /> </bean> <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.default.jdbc.driverClassName}" /> <property name="url" value="${db.default.jdbc.url}" /> <property name="username" value="${db.zs.jdbc.username}" /> <property name="password" value="${db.zs.jdbc.password}" /> <property name="initialSize" value="${db.default.dbcp.initialSize}" /> <property name="maxIdle" value="${db.default.dbcp.maxIdle}" /> <property name="minIdle" value="${db.default.dbcp.minIdle}" /> <property name="maxActive" value="${db.default.dbcp.maxActive}" /> <property name="logAbandoned" value="${db.default.dbcp.logAbandoned}" /> <property name="removeAbandoned" value="${db.default.dbcp.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${db.default.dbcp.removeAbandonedTimeout}" /> <property name="maxWait" value="${db.default.dbcp.maxWait}" /> <property name="validationQuery" value="${db.default.dbcp.validationQuery}" /> <property name="testOnBorrow" value="${db.default.dbcp.testOnBorrow}" /> <property name="testOnReturn" value="${db.default.dbcp.testOnReturn}" /> <property name="testWhileIdle" value="${db.default.dbcp.testWhileIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${db.default.dbcp.timeBetweenEvictionRunsMillis}" /> <property name="numTestsPerEvictionRun" value="${db.default.dbcp.numTestsPerEvictionRun}" /> <property name="minEvictableIdleTimeMillis" value="${db.default.dbcp.minEvictableIdleTimeMillis}" /> </bean>
//动态数据源的代码
public class DynamicDataSource extends AbstractRoutingDataSource {/** * log4j 记录器 */ private static final Logger log = Logger.getLogger(DynamicDataSource.class); /** * 决定返回那个数据源 */ protected Object determineCurrentLookupKey() { String dataSourceId = ParameterCache.getDatasourceProp(ThreadLocalContext.getUserId()); log.debug("使用数据源" + (dataSourceId == null ? "0" : dataSourceId)); return dataSourceId; }
}
//线程局部变量用来持久当前登录用户
public class ThreadLocalContext {
/**
* 线程局部变量,用来保存当前用户id
*/
public static ThreadLocal userThreadLocal;static { userThreadLocal = new ThreadLocal(); } public static String getUserId() { return (String) userThreadLocal.get(); } public static void setUserId(String userId) { userThreadLocal.set(userId); }
}
你可以参考下代码,具体不清楚的在根据以上内容到网上找找答案,相关资料非常多。不过以上配置不支持同一个方法连接多个数据源的事物。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 能给我一些人生建议吗
- ¥15 mac电脑,安装charles后无法正常抓包
- ¥18 visio打开文件一直显示文件未找到
- ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
- ¥30 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
- ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
- ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。
- ¥15 R语言shiny包和ncdf4包报错
- ¥15 origin绘制有显著差异的柱状图和聚类热图
- ¥20 simulink实现滑模控制和pid控制对比,提现前者优势