多数据源问题很常见,例如读写分离数据库配置。
原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题。
解决方法如下:
1、首先配置多个datasource
1 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 2 <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"> 3 </property> 4 <property name="url" value="jdbc:jtds:sqlserver://10.82.81.51:1433;databaseName=standards"> 5 </property> 6 <property name="username" value="youguess"></property> 7 <property name="password" value="youguess"></property> 8 </bean> 9 <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"> 10 <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"> 11 </property> 12 <property name="url" value="jdbc:jtds:sqlserver://10.82.81.52:1433;databaseName=standards"> 13 </property> 14 <property name="username" value="youguess"></property> 15 <property name="password" value="youguess"></property> 16 </bean>
2、写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法
1 package com.standard.core.util; 2 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 3 public class DynamicDataSource extends AbstractRoutingDataSource { 4 @Override 5 protected Object determineCurrentLookupKey() { 6 return CustomerContextHolder.getCustomerType(); 7 } 8 }
3、利用ThreadLocal解决线程安全问题
1 package com.standard.core.util; 2 public class CustomerContextHolder { 3 public static final String DATA_SOURCE_A = "dataSource"; 4 public static final String DATA_SOURCE_B = "dataSource2"; 5 private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); 6 public static void setCustomerType(String customerType) { 7 contextHolder.set(customerType); 8 } 9 public static String getCustomerType() { 10 return contextHolder.get(); 11 } 12 public static void clearCustomerType() { 13 contextHolder.remove(); 14 } 15 }
4、数据源配置
1 <bean id="dynamicDataSource" class="com.standard.core.util.DynamicDataSource" > 2 <property name="targetDataSources"> 3 <map key-type="java.lang.String"> 4 <entry value-ref="dataSource" key="dataSource"></entry> 5 <entry value-ref="dataSource2" key="dataSource2"></entry> 6 </map> 7 </property> 8 <property name="defaultTargetDataSource" ref="dataSource" > 9 </property> 10 </bean>
5、在DAOImpl中切换数据源
1 CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);
相关推荐
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及数据处理平台源码+论文+视频.zip
毕设和企业适用springboot企业数据智能分析平台类及汽车管理平台源码+论文+视频
毕设和企业适用springboot社区物业类及企业创新研发平台源码+论文+视频
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Floating Text Example</title> <style> .floating-text { font-size: 24px; position: relative; animation: float 3s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } </style> </head> <body> <div class="floating-text">Hello, I'm floating!</div> <script> document.addEventListener('DOMContentLoaded', function() {
毕设和企业适用springboot社交媒体分析平台类及智慧医疗管理平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及餐饮管理平台源码+论文+视频
毕设和企业适用springboot人工智能客服系统类及用户行为分析平台源码+论文+视频
毕设和企业适用springboot全渠道电商平台类及个性化广告平台源码+论文+视频
毕设和企业适用springboot社交互动平台类及线上图书馆源码+论文+视频
毕设和企业适用springboot企业知识管理平台类及供应链优化平台源码+论文+视频
毕设和企业适用springboot企业健康管理平台类及数据处理平台源码+论文+视频.zip
内容概要:本文档是一份面向初学者的详细指南,重点介绍如何利用Vue.js 2.0快速创建和运行简单的Todo List应用。首先指导安装必需的Node.js、npm/yarn等环境准备,接着通过Vue CLI工具生成新的Vue项目,再详细介绍项目目录和组件的构建方式。最后提供了具体的方法实现添加和删除待办事项,并指导如何使用命令启动应用,查看结果。 适合人群:具备基础Web开发技能的前端开发新手,尤其是对Vue框架感兴趣的学习者。 使用场景及目标:作为初学者入门级的学习资料,本文档的目标是让读者能够在最短时间内掌握Vue.js的基础概念和技术栈的应用方式,以便日后可以独立地构建更加复杂的Vue应用。 其他说明:除了学习如何构建应用程序之外,本文档还涵盖了Vue的基本语法和数据绑定、事件处理机制等重要概念,对于理解Vue框架的工作原理十分有帮助。
毕设和企业适用springboot企业健康管理平台类及智能化系统源码+论文+视频.zip
毕设和企业适用springboot企业健康管理平台类及远程医疗平台源码+论文+视频.zip
毕设和企业适用springboot数据可视化类及数据智能化平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及用户体验优化平台源码+论文+视频.zip
毕设和企业适用springboot人工智能客服系统类及虚拟银行平台源码+论文+视频
毕设和企业适用springboot社交应用平台类及云计算资源管理平台源码+论文+视频
毕设和企业适用springboot企业数据监控平台类及线上图书馆源码+论文+视频