ssm 配置多数据源

SSM多数据源配置(MySQL+Oracle) 背景 最近在写一个小项目时,项目数据库是MySQL。但是项目中需要获取另外一个数据库的数据以便使用,并且另一个数据库是Oracle。所以就需要在项目中配置多数据源。下面就简单介绍下SSM框架是如何配置多数据源的。 原理 MyBatis在创建SqlSession时,动态的使用不同的DataSource,这样就可以动态的使用不同的数据源。如何动态的使用不同的dataSource。在Spri... 阅读详情

原文链接:http://blog.youkuaiyun.com/q908555281/article/details/50316137


总体大概流程:

1. 拷贝所需jar

2.写一个数据库切换的工具类:DataSourceContextHolder,用来切换数据库
3.写一个DynamicDataSource类来继承AbstractRoutingDataSource,并重写determineCurrentLookupKey()方法,来达到动态切换数据库
4. 创建springmvc-servlet.xml文件,然后创建spring配置文件(beans.xml)
5. 在beans.xml文件中配置数据源。我这里配置的三个数据源
6. 在beans.xml文件中创建sqlSessionFactory实例
7. 在beans.xml文件中配置事物、事物的传播性
8. 在beans.xml文件中配置AOP
9. 创建一个User对象,配置User.xml文件。写一个UserMapper接口,用来操作User对象的接口
10. 将User类的路径以及User.xml文件的路径在mybatis-config.xml文件中配置
11. 写一个UserService接口(接口里面的方法和UserMapper接口里面的方法一致,返回值和参数可不同,方法名最好一致),并写UserServiceImpl来实现UserService接口
12.写Controller类,并在其中写相对应的方法,给外部调用


下面看一下我的工程的目录:
common包存放的是一些公用类
controller包下放的是提供给外部访问的接口的(.do)类
datasource包下是用来配置数据库
entity:实体类

mapper:.....存放XXMapper以及实体类的对应表的关系的xml文件





下面一步步的来讲解:

1、拷贝jar文件。需要的jar文件入下图所示,因为我的项目中用到了json解析,所以导入了json相关的包



2.写一个数据库切换的工具类:DataSourceContextHolder,用来切换数据库

[java]  view plain  copy
  1. public class DataSourceContextHolder {  
  2.      private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  
  3.   
  4.      public static void setDbType(String dbType) {  
  5.             contextHolder.set(dbType);  
  6.      }  
  7.   
  8.      public static String getDbType() {  
  9.             return ((String) contextHolder.get());  
  10.      }  
  11.   
  12.      public static void clearDbType() {  
  13.             contextHolder.remove();  
  14.      }  
  15. }  

3.写一个DynamicDataSource类来继承AbstractRoutingDataSource,并重写determineCurrentLookupKey()方法,来达到动态切换数据库

[java]  view plain  copy
  1. import java.sql.SQLFeatureNotSupportedException;  
  2. import java.util.logging.Logger;  
  3.   
  4. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  
  5.   
  6. public class DynamicDataSource extends AbstractRoutingDataSource {  
  7.   
  8.      @Override  
  9.      public Logger getParentLogger() throws SQLFeatureNotSupportedException {  
  10.             return null;  
  11.      }  
  12.   
  13.      @Override  
  14.      protected Object determineCurrentLookupKey() {  
  15.             return DataSourceContextHolder. getDbType();  
  16.      }  
  17.   
  18. }  

4. 创建springmvc-servlet.xml文件,然后创建spring配置文件(beans.xml),看一下我的springmvc-servlet.xml文件。
   这里配置了一个注解扫描器,一般填自己的主包名就可以了,他会自动扫描我的com.baimi.routerweb包下面所有的带注解的类或者方法,常变量等。
   还配置了一个视图解析器(如果需要用到jsp文件,就需要配置此解析器)
   最后引入我的spring的配置文件:beans.xml文件

[html]  view plain  copy
  1. <?xml version="1.0" encoding= "UTF-8"?>  
  2. <beans xmlns= "http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context= "http://www.springframework.org/schema/context"  
  5.        xmlns:mvc= "http://www.springframework.org/schema/mvc"  
  6.        xsi:schemaLocation= "http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
  7.             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  9.   
  10.       <!-- 注解扫描器 -->  
  11.       <context:component-scan base-package ="com.baimi.routerweb"/>  
  12.         
  13.       <!-- 配置试图解析器 -->  
  14.       <bean class= "org.springframework.web.servlet.view.InternalResourceViewResolver" >  
  15.              <property name ="prefix" value="/"></ property>  
  16.              <property name ="suffix" value=".jsp"></ property>  
  17.       </bean >  
  18.         
  19.       <import resource ="classpath:beans.xml"/>  
  20.   
  21. </beans>  


5. 在beans.xml文件中配置数据源。我这里配置的三个数据源,不过在配置数据源之前,先配置一下注解扫描器。然后我接着配置了三个数据源,然后配置动态数据源

[html]  view plain  copy
  1. <context:component-scan base-package ="com" />  
  2.   
  3.    <!-- 多数据源配置 -->  
  4.    <bean id ="ds_admin" class= "org.apache.commons.dbcp.BasicDataSource" >  
  5.           <property name ="driverClassName" value= "com.mysql.jdbc.Driver"></property >  
  6.           <property name ="url" value= "jdbc:mysql://192.168.19.72:3307/100msh_admin" ></property >  
  7.           <property name ="username" value="root"></ property>  
  8.           <property name ="password" value="root"></ property>  
  9.    </bean >  
  10.    <bean id ="ds_partner" class= "org.apache.commons.dbcp.BasicDataSource" >  
  11.           <property name ="driverClassName" value= "com.mysql.jdbc.Driver"></property >  
  12.           <property name ="url"  
  13.                 value= "jdbc:mysql://192.168.19.72:3308/100msh_partner" ></property >  
  14.           <property name ="username" value="root"></ property>  
  15.           <property name ="password" value="root"></ property>  
  16.    </bean >  
  17.    <bean id ="ds_mop" class="org.apache.commons.dbcp.BasicDataSource">  
  18.           <property name ="driverClassName" value= "com.mysql.jdbc.Driver"></property >  
  19.           <property name ="url" value= "jdbc:mysql://192.168.19.72:3309/100msh_mop" ></property >  
  20.           <property name ="username" value="root"></ property>  
  21.           <property name ="password" value="root"></ property>  
  22.    </bean >  
  23.   
  24.    <!-- 动态配置数据源 -->  
  25.    <bean id ="dataSource" class= "com.baimi.routerweb.datasource.DynamicDataSource" >  
  26.           <property name ="targetDataSources">  
  27.                 <map key-type ="java.lang.String">  
  28.                       <entry value-ref ="ds_admin" key= "ds_admin"></entry >  
  29.                       <entry value-ref ="ds_partner" key= "ds_partner"></entry >  
  30.                       <entry value-ref ="ds_mop" key="ds_mop"></ entry>  
  31.                 </map >  
  32.           </property >  
  33.           <property name ="defaultTargetDataSource" ref= "ds_mop"></property >      <!-- 默认使用ds1的数据源 -->  
  34.    </bean >  

6. 在beans.xml文件中创建sqlSessionFactory实例

[html]  view plain  copy
  1. <!-- 创建SqlSessionFactory -->  
  2. <bean id ="sqlSessionFactoryBean" class= "org.mybatis.spring.SqlSessionFactoryBean" >  
  3.        <!-- 指定数据源 -->  
  4.        <property name ="dataSource" ref="dataSource" />  
  5.        <!-- 指定mybatis 的配置文件 -->  
  6.        <property name ="configLocation" value= "classpath:mybatis-config.xml" />  
  7. </bean >  

7. 在beans.xml文件中配置事物、事物的传播性

[html]  view plain  copy
  1. <!-- 配置事务 -->  
  2.       <bean id ="transactionManager"  
  3.              class= "org.springframework.jdbc.datasource.DataSourceTransactionManager" >  
  4.              <property name ="dataSource" ref="dataSource"></ property>  
  5.       </bean >  
  6.   
  7.       <!-- 映射接口 -->  
  8.       <bean class ="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  9.              <property name ="basePackage" value= "com.baimi.routerweb.mapper"></property >  
  10.       </bean >  
  11.   
  12.       <!-- 配置事务的传播特性 -->  
  13.       <tx:advice id ="txAdvice" transaction-manager="transactionManager">  
  14.              <tx:attributes >  
  15.                    <tx:method name ="find*" read-only="true" />  
  16.                    <tx:method name ="get*" read-only="true" />  
  17.                    <tx:method name ="query*" read-only="true" />  
  18.                    <tx:method name ="add*" propagation="REQUIRED" />  
  19.                    <tx:method name ="update*" propagation="REQUIRED" />  
  20.                    <tx:method name ="del*" propagation="REQUIRED" />  
  21.              </tx:attributes >  
  22.       </tx:advice >  

8. 在beans.xml文件中配置AOP,注意这里,expression 后面一定要是自己程序所在包名,复制的时候一定要改掉

[html]  view plain  copy
  1. <!-- 配置AOP -->  
  2. <aop:config >  
  3.        <!-- 切点 -->  
  4.        <aop:pointcut expression ="execution(* com.baimi.routerweb.service..*.*(..))"  
  5.              id= "pointcut" />  
  6.        <aop:advisor advice-ref ="txAdvice" pointcut-ref="pointcut" />  
  7. </aop:config >  

9. 创建一个User对象,配置User.xml文件。写一个UserMapper接口,用来操作User对象的接口。
    User类属性有点长,请忽略这些属性

[java]  view plain  copy
  1.   public class User {  
  2.      private int userId;  
  3.      private int compId;  
  4.      private String euserName;  
  5.      private String euserPhone;  
  6.      private int euserStatus;  
  7.      private String eAddTime;  
  8.      private String eLeaveTime;  
  9.      private String eUserNameCn;  
  10.      private int cUserId;  
  11.      private String scDown;  
  12.      private String userDesc;  
  13.   
  14.      public int getUserId() {  
  15.             return userId;  
  16.      }  
  17.   
  18.      public void setUserId( int userId) {  
  19.             this. userId = userId;  
  20.      }  
  21.   
  22.      public int getCompId() {  
  23.             return compId;  
  24.      }  
  25.   
  26.      public void setCompId( int compId) {  
  27.             this. compId = compId;  
  28.      }  
  29.   
  30.      public String getEuserName() {  
  31.             return euserName;  
  32.      }  
  33.   
  34.      public void setEuserName(String euserName) {  
  35.             this. euserName = euserName;  
  36.      }  
  37.   
  38.      public String getEuserPhone() {  
  39.             return euserPhone;  
  40.      }  
  41.   
  42.      public void setEuserPhone(String euserPhone) {  
  43.             this. euserPhone = euserPhone;  
  44.      }  
  45.   
  46.      public int getEuserStatus() {  
  47.             return euserStatus;  
  48.      }  
  49.   
  50.      public void setEuserStatus( int euserStatus) {  
  51.             this. euserStatus = euserStatus;  
  52.      }  
  53.   
  54.      public String geteAddTime() {  
  55.             return eAddTime;  
  56.      }  
  57.   
  58.      public void seteAddTime(String eAddTime) {  
  59.             this. eAddTime = eAddTime;  
  60.      }  
  61.   
  62.      public String geteLeaveTime() {  
  63.             return eLeaveTime;  
  64.      }  
  65.   
  66.      public void seteLeaveTime(String eLeaveTime) {  
  67.             this. eLeaveTime = eLeaveTime;  
  68.      }  
  69.   
  70.      public String geteUserNameCn() {  
  71.             return eUserNameCn;  
  72.      }  
  73.   
  74.      public void seteUserNameCn(String eUserNameCn) {  
  75.             this. eUserNameCn = eUserNameCn;  
  76.      }  
  77.   
  78.      public int getcUserId() {  
  79.             return cUserId;  
  80.      }  
  81.   
  82.      public void setcUserId( int cUserId) {  
  83.             this. cUserId = cUserId;  
  84.      }  
  85.   
  86.      public String getScDown() {  
  87.             return scDown;  
  88.      }  
  89.   
  90.      public void setScDown(String scDown) {  
  91.             this. scDown = scDown;  
  92.      }  
  93.   
  94.      public String getUserDesc() {  
  95.             return userDesc;  
  96.      }  
  97.   
  98.      public void setUserDesc(String userDesc) {  
  99.             this. userDesc = userDesc;  
  100.      }  
  101. }    


编写UserMapper接口,这里面的方法是用来操作User对象的,我这里只是一个简单的根据手机号码,得到这个User对象
[java]  view plain  copy
  1. public interface UserMapper {  
  2.      public User getUser(String euserPhone);  
  3. }  

编写User.xml文件,该文件里面配置User类里面的属性和表中的那些字段进行对应,以及在UserMapper中定义的查询的方法,在User.xml中写上对应的查询语句,我这里是查的t_expand_user 表

[html]  view plain  copy
  1. <?xml version="1.0" encoding= "UTF-8" ?>  
  2. <!DOCTYPE mapper  
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >  
  5.   
  6. <mapper namespace= "com.baimi.routerweb.mapper.UserMapper" >  
  7.       <resultMap type ="User" id="usermap">  
  8.              <result property ="userId" column="euser_id" />  
  9.              <result property ="compId" column="comp_id" />  
  10.              <result property ="euserName" column="euser_name" />  
  11.              <result property ="euserPhone" column="euser_phone" />  
  12.              <result property ="euserStatus" column="euser_status" />  
  13.              <result property ="eAddTime" column="e_add_time" />  
  14.              <result property ="eLeaveTime" column="e_leave_time" />  
  15.              <result property ="eUserNameCn" column="euser_name_cn" />  
  16.              <result property ="cUserId" column="user_id" />  
  17.              <result property ="scDown" column="sc_own" />  
  18.              <result property ="userDesc" column="euser_desc" />  
  19.       </resultMap >  
  20.   
  21.       <!-- 查询一条记录 -->  
  22.       <select id ="getUser" parameterType="java.lang.String" resultMap= "usermap">  
  23.             select * from t_expand_user where euser_phone=#{euserPhone}  
  24.       </select >  
  25.   
  26. </mapper>  


10. 将User类的路径以及User.xml文件的路径在mybatis-config.xml文件中配置

[html]  view plain  copy
  1. <?xml version="1.0" encoding= "UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd" >  
  5. <configuration>  
  6.   
  7.       <!-- 别名 -->  
  8.       <typeAliases >  
  9.              <typeAlias type ="com.baimi.routerweb.entity.User" alias= "User" />  
  10.       </typeAliases >  
  11.       <mappers >  
  12.              <mapper resource ="com/baimi/routerweb/mapper/User.xml" />  
  13.       </mappers >  
  14. </configuration>  

11. 写一个UserService接口(接口里面的方法和UserMapper接口里面的方法一致,返回值和参数可不同,方法名最好一致),并写UserServiceImpl来实现UserService接口

[java]  view plain  copy
  1. public interface UserService {  
  2.      public User getUser(String euserPhone);  
  3. }  

UserServiceImpl里面要做的就是调用UserMapper中的方法
[java]  view plain  copy
  1. import javax.annotation.Resource;  
  2.   
  3. import org.springframework.stereotype.Service;  
  4.   
  5. import com.baimi.routerweb.datasource.DataSourceContextHolder;  
  6. import com.baimi.routerweb.datasource.DataSourceType;  
  7. import com.baimi.routerweb.entity.User;  
  8. import com.baimi.routerweb.mapper.UserMapper;  
  9. import com.baimi.routerweb.service.UserService;  
  10.   
  11. @Service  
  12. public class UserServiceImpl implements UserService {  
  13.   
  14.      @Resource(name = "userMapper")  
  15.      private UserMapper userMapper;  
  16.   
  17.      @Override  
  18.      public User getUser(String euserPhone) {  
  19.           DataSourceContextHolder. setDbType(DataSourceType.SOURCE_MOP);  
  20.             return userMapper.getUser(euserPhone);  
  21.      }  
  22.   
  23. }  


12.写Controller类,并在其中写相对应的方法,给外部调用,这里主要就是两行代码:注意每次要和数据库打交道之前,切换到相对应的数据库,我的DataSourceType. SOURCE_MOP="ds_mop"; 这里的名字一定要和beans.xml里面配置的数据源的名称一样

[java]  view plain  copy
  1. //切换数据库  
  2. DataSourceContextHolder. setDbType(DataSourceType. SOURCE_MOP);  
  3. //从数据库中得到该用户的数据  
  4. User user= userService.getUser(userId);  

整个Controller类的代码
[java]  view plain  copy
  1.   
[java]  view plain  copy
  1. import javax.annotation.Resource;  
  2. import javax.servlet.http.HttpServletRequest;  
  3. import javax.servlet.http.HttpServletResponse;  
  4.   
  5. import net.sf.json.JSONObject;  
  6.   
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.web.bind.annotation.RequestMapping;  
  9.   
  10. import com.baimi.routerweb.common.Constant;  
  11. import com.baimi.routerweb.common.ErrorHandle;  
  12. import com.baimi.routerweb.datasource.DataSourceContextHolder;  
  13. import com.baimi.routerweb.datasource.DataSourceType;  
  14. import com.baimi.routerweb.entity.User;  
  15. import com.baimi.routerweb.service.UserService;  
  16. import com.baimi.routerweb.util.HttpUtil;  
  17.   
  18. @Controller  
  19. public class MainController {  
  20.   
  21.      @Resource(name = "userServiceImpl")  
  22.      private UserService userService;  
  23.   
  24.      @RequestMapping("/login.do")  
  25.      public String login(HttpServletRequest request, HttpServletResponse response) {  
  26.             // 获取客户端传过来的code的值  
  27.            String code = request.getParameter( "code");  
  28.             if (code == null || "".equals(code)) {  
  29.                  return ErrorHandle.getError(ErrorHandle.INVALID_TOKEN, "invalid token");  
  30.            }  
  31.             // 从微信得到token的值  
  32.            JSONObject objToken = HttpUtil.httpRequest(Constant.URL_WEIXIN_TOKEN, "GET", null);  
  33.             if (objToken == null || "".equals(objToken)) {  
  34.                  return ErrorHandle.getError(ErrorHandle.SERVICE_UNRESPONSE, "service unresponse");  
  35.            }  
  36.             if (!objToken.has( "access_token")) {  
  37.                  return ErrorHandle.getError(ErrorHandle.INVALID_TOKEN, "invalid token");  
  38.            }  
  39.             //根据token和code得到UserId  
  40.            JSONObject objUser = HttpUtil.httpRequest(Constant.URL_GET_USERID,  
  41.                       "POST", "access_token=" + objToken.getString("access_token" )+ "&code=" + code + "&agentid=1");  
  42.             if(objUser== null|| "".equals(objUser)){  
  43.                  return ErrorHandle.getError(ErrorHandle.SERVICE_UNRESPONSE, "service unresponse");  
  44.            }  
  45.             if(!objUser.has( "UserId")){  
  46.                  return ErrorHandle.getError(ErrorHandle.INVALID_TOKEN, "invalid token");  
  47.            }  
  48.            String userId=objUser.getString( "UserId");  
  49.             //切换数据库  
  50.           DataSourceContextHolder. setDbType(DataSourceType.SOURCE_MOP);  
  51.             //从数据库中得到该用户的数据  
  52.            User user= userService.getUser(userId);  
  53.             if(user!= null){  
  54.                 JSONObject rtObj = new JSONObject();  
  55.                 rtObj.put( "userId", String.valueOf(user.getUserId()));  
  56.                  return rtObj.toString();     
  57.            }  
  58.             return ErrorHandle.getError(ErrorHandle.INVALID_USER,"invalid user");  
  59.      }  
  60. }  
基于SSM框架的多数据源配置实战 SSM(Spring + Spring MVC + MyBatis)是当前Java Web开发中最主流的轻量级框架组合。Spring作为核心容器,通过IoC(控制反转)管理对象生命周期与依赖关系,通过AOP(面向切面编程)实现日志、事务等横切关注点的解耦;Spring MVC则负责Web层的请求调度,具备灵活的控制器、视图解析和数据绑定机制;MyBatis作为持久层框架,采用ORM(对象关系映射)方式,将Java对象与数据库记录进行映射,简化数据库操作。 阅读详情

相关推荐

ssm实现多数据源配置

ssm实现多数据源配置ssm实现多数据源配置ssm实现多数据源配置ssm实现多数据源配置,

Spring+SpringMVC+Mybatis 多数据源整合

此篇文章是基于Spring3.0和mybatis3.2的 总体大概流程: 1. 拷贝所需jar 2.写一个数据库切换的工具类:DataSourceContextHolder,用来切换数据库 3.写一个DynamicDataSource类来继承AbstractRoutingDataSource,并重写determineCurrentLookupKey()方法,来达到动态切换数据库 4.

Townkoim的专栏 4万+

用Isaac Sim复现经典案例:手把手教你写Python脚本控制机械臂抓取(附避障算法调试心得)

本文详细介绍了如何使用NVIDIA Isaac Sim仿真系统复现机械臂抓取经典案例,包括Python脚本编写、避障算法调试等关键步骤。通过URDF模型导入、关节控制逻辑实现和RMPFlow避障配置等实战演示,帮助开发者快速掌握机器人仿真技术,特别分享了官方文档未提及的实用调试技巧和性能优化策略。

weixin_30632089的博客 408

spring 解决多数据源问题,主要的继承类为AbstractRoutingDataSource

这里外部需要创建三个java类:首先在,spring里这样写:<!-- 解决多数据源 --> <bean id="dynamicDataSource" class="com.sinosoft.risk.system.datasource.DynamicDataSource"> <!-- 通过key-value的形式来关联数据源 --> <property na

寂寞是一个人的狂欢,狂欢是一群人的寂寞... 849

gRPC之gRPC开发流程与入门案例

gRPC之gRPC开发流程与入门案例

YIYIYI 3759

银行客户投诉预测模型优化

在实际操作中,银行可以使用这个优化后的模型来识别那些可能引起客户不满的因素,并采取预防措施。例如,如果模型表明退款金额是一个很强的预测因子,银行可能会审查其退款政策,以确保它对客户是公平和透明的。在银行业务中,客户投诉是一个重要的指标,它直接关系到客户满意度和银行服务质量。某一个指标,比如:退款金额,本文假设退款金额对于预测投诉的权重应该高于赔偿金额。在每次迭代中,本文使用当前的权重组合来训练模型,并计算在测试集上的准确率。的可能值来搜索最佳的权重组合,并输出最佳准确率及对应的权重。来寻找最佳的权重组合。

weixin_57499254的博客 1707

Java动态存储配置信息,Java Spring4配置动态数据源(AbstractRoutingDataSource )

Spring配置多数据源的方式和具体使用过程。Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况:一是,表级上的跨数据库。即,对于不同的数据库却有相同的表(表名和表结构完全相同)。二是,非表级上的跨数据库。即,多个数据源不存在相同的表。Spring2.x的版本中采用Proxy模式,就是我们在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑...

weixin_42297446的博客 291

Win10系统下海思SS928开发板烧写工具ToolPlatform-1.0.11安装避坑指南

本文详细介绍了在Windows 10系统下安装和配置海思SS928开发板烧写工具ToolPlatform-1.0.11的完整流程与避坑指南。核心解决了JVM内存配置导致的界面卡顿、闪退问题,并提供了驱动安装、硬件连接、镜像烧写的实战步骤,帮助嵌入式开发新手快速搭建稳定的烧写环境。

kite3的博客 454

spring+SpringMVC+MyBatis之配置多数据源

数据库准备   1、准备2个数据库,本例以mysql为例在第一个数据库新建表user 在第二个数据库中,新建表dog 项目搭建   1、搭建一个Springmvc + Spring + Mybatis maven项目, POM文件中引入AOP相关依赖 项目目录: 配置文件jdbc.properties 编辑一个扩展AbstractRoutingDataSource类,DynamicDataSource.java 封装一个的对数据源进行操作的类,DataSourceHolder.java 我们可以应用sp

reg183的专栏 1473

system_stm32f10x.c文件分析

配置系统时钟(包括系统时钟源、锁相环(PLL)倍频系数、高级高性能总线(AHB)/ 高级外设总线(APBx)预分频器以及闪存相关设置)。该函数在系统复位后的启动阶段被调用,且调用时机早于跳转到主程序之前。

Jia shuheng的博客 603

华为OD机考双机位C卷 - 相对开音节 (Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 相对开音节 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 745

SpringBoot + MyBatis配置多数据源

引子 最近项目中,由于数据源更替,部分原来的需要通过REST API获取的数据需要切换成 直接从数据库中获取,所以,需要给项目配置多数据源。在查阅了一些文档后,这里记录下自己亲身实践后的结果,希望能帮到大家。 配置项 下面是在 application.properties 中配置的数据: # 多数据源配置,数据源一 user.datasource.jdbcUrl= user.dataso...

蛋壳城堡 442

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2846

ssm框架配置多数据源的方式

ssm框架配置多数据源的方式 项目开发过程中,我们可能涉及到链接多个数据库进行数据存取等操作。这个时候我们就需要配置多个数据源。其中配置多数据源有很多种方式。 话不多说,上教程。 1、首先搭建SSM框架,这就不必再多介绍。想必大家的项目里单数据源的情况下都已经能连上数据库了。 2、配置多数据源之前,我们肯定要知道我们这个数据源要连接的是什么库,比如Oracle,mysql,SQL Server等。配置前,我们需要把链接数据库的驱动jar包放到项目的lib下,因为有了驱动,我们才可以链接。(我以Orac

头发都掉光了的博客 577

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1199

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ssm框架+多数据源+事务配置

ssm框架配置事务 正常的配置文件spring-mybatis.xml <?xml version='1.0' encoding='UTF-8' ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta...

升级打怪 288

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SSM框架配置多数据源oracle+mysql

最近在项目中需要对接其他系统平台的数据库,自己的系统是SSM架构,用的是Orcal数据库,需要获取对接系统的mysql数据库的数据,因此需要在自己系统上配置一个mysql的数据源。结合自己系统的文件配置,查了一下网上的案列,把自己总结的配置多数据源的过程总结如下。 1,dataSource.properties添加orcal和mysql数据库 url = jdbc:oracle:thin:@10.100.***.**:1521:uat driverClassName = oracle....

qq_23927391的博客 896

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SSM 多数据源配置

ssm项目双数据源配置

qq_33609768的博客 494

java基于ssm框架整合的多数据源配置

java基于ssm框架整合的多数据源配置 项目基于maven管理,简单易懂。 源代码下载地址:http://download.youkuaiyun.com/detail/feiwusuoai/9566210 或者:https://github.com/wangguan5188/moreDataSource/tree/develop

feiwusuoai的博客 894

ssm框架 mysql 一对多_SSM框架之多数据源配置

多数据源的应用场景:主要是数据库拆分后,怎样让多个数据库结合起来来达到业务需求。SSM框架(Spring+SpringMVC+MyBatis(MyBatis-Plus))是目前最常用的,此次仍然是maven工程。关于这个多数据源例子,我已经上传到我的github上,地址为:https://github.com/youcong1996/study_simple_demo.git不过需要注意的是,分支...

weixin_39533742的博客 200

【原创】SSM框架(2):多数据源支持,动态配置依赖的数据源

一、SSM框架配置多数据源的原理   原理:MyBatis在创建SqlSession时,动态的使用不同的dataSource,就可以动态的使用不同的数据源。   那么,怎样才能动态的使用不同的dataSource呢? 在Spring框架中,提供了一个类AbstractRoutingDataSource,顾名思义叫做路由选择。该类AbstractRoutingDataSource继承Abstra...

weixin_33875564的博客 210

mysql之整合ssm多数据源配置

一,基于SSM框架的多数据源配置 1.创建DynamicDataSourceHolder用于持有当前线程中使用的数据源标识 public class DynamicDataSourceHolder { /** * 注意:数据源标识保存在线程变量中,避免多线程操作数据源时互相干扰 */ private static final ThreadLoca...

weixin_34208185的博客 241

ssm框架多数据源配置详解

文章说明:本文为懒汉式教程,只需要粘贴复制就可以实现。 废话不多说,直接代码走起 这里已ssm框架为例,项目所需的相关依赖jar都已经集成在框架中了。。。 1、数据源连接参数 jdbc.properties jdbc.driverClassName=com.mysql.jdbc.Driver #mysql----1 jdbc.url=jdbc\:mysql\://47.96.67.113...

qq_34295227的博客 787

SSM框架多数据源配置以及一直调用默认的数据源的问题

SSM框架多数据源配置失效,一直调用默认数据库的原因

qq_36722167的博客 2758

SSM 多数据源配置(配置两个数据源)

SSM多数据源配置(配置两个数据源) 前言:SSM项目需要配置多数据源,以达到操作不同数据库的数据,网上看到大多是通过动态切换数据源的方式,但在项目中总会出现问题,这里通过配置两个spring-mybatis.xml(sqlSessionFactory,transactionManager),可以避免数据源切换问题。 具体思路如下: 1.ssm框架搭建略,系统项目结构如下: 注意点:两个数据源需要...

8770

SSM项目多数据源配置(MySQL+SQL Server)

SSM项目多数据源配置(MySQL+SQL Server) 核心代码百度云下载: https://pan.baidu.com/s/1eWVeVageYiRKyRbwiEAQVA 提取码:gioj 核心代码文件结构 一、MySQL 多数据源配置 1、pom.xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-bo

qq_40359932的博客 795
上一篇: idea 使用
下一篇: js 运算的字符串 判断运算是否合法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值