springboot+mybatis切换数据源问题

问题描述

springboot+mybatis想实现oracle和Mysql数据库切换,目前用 Mysql作为 主数据源时,
可以正常查询;用Oracle作为主数据源时,也可以正常查询;目前想实现,Mysql作为主数据源时,也可以切换到另外一个数据源。

相关代码如下

创建数据源

创建Mysql数据源

@Bean(name = "dataSource")
    @Primary
    public ComboPooledDataSource createDataSource() throws PropertyVetoException {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        comboPooledDataSource.setDriverClass(jdbcDriver);
        comboPooledDataSource.setJdbcUrl(jdbcUrl);
        comboPooledDataSource.setUser(jdbcUsername);
        comboPooledDataSource.setPassword(jdbcPassword);
        //连接关闭不自动提交
        comboPooledDataSource.setAutoCommitOnClose(false);
        return comboPooledDataSource;
    }
    @Bean(name="sqlSessionFactory")
    @Primary
    public SqlSessionFactoryBean createSqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource)
            throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath));
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
        return sqlSessionFactoryBean;
    }

创建oracle数据源

@Bean(name="oracleDataSource")
    public ComboPooledDataSource createOracleDataSource() throws PropertyVetoException {
        ComboPooledDataSource comboPooledOracleDataSource = new ComboPooledDataSource();
        comboPooledOracleDataSource.setDriverClass(oracleJdbcDriver);
        comboPooledOracleDataSource.setJdbcUrl(oracleJdbcUrl);
        comboPooledOracleDataSource.setUser(oracleJdbcUser);
        comboPooledOracleDataSource.setPassword(oracleJdbcPassword);
        comboPooledOracleDataSource.setAutoCommitOnClose(false);
        return comboPooledOracleDataSource;
    }

    @Bean(name="oracleSqlSessionFactory")
    public SqlSessionFactoryBean createSqlSessionFactoryBean(@Qualifier("oracleDataSource") DataSource oracleDataSource)
            throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath));
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + oracleMapperPath;
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
        sqlSessionFactoryBean.setDataSource(oracleDataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
        return sqlSessionFactoryBean;
    }

事物管理代码段

@Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;

    @Autowired
    @Qualifier("oracleDataSource")
    private DataSource oracleDataSource;

    @Bean(name="localMysql")
    public PlatformTransactionManager localMysqlManager(){
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name="localOracle")
    public PlatformTransactionManager oracleManager(){
        return new DataSourceTransactionManager(oracleDataSource);
    }

切换数据源代码段

@Override
    @Transactional(value = "localOracle")
    public List<Map> listOracle() {
        return helloOracleDao.listHello();
    }

问题

感觉数据源创建什么的都没问题,但是最后一步切换不生效,不知道什么问题,还请大神赐教

1个回答

试试用aop做切换数据源头,我是springmvc+mybaris的项目也做了数据源切换,mysql是主数据源,sqlserver是副数据源

qq_37461349
不喜欢吃猫的鱼 回复pengShuai007: 好吧 看你的代码 这样写的也没什么问题
8 个月之前 回复
pengShuai007
pengShuai007 pengShuai007 也看到了aop相关的动态数据源切换,实现方式跟这个有点区别,现在想搞清楚这个为啥有问题
8 个月之前 回复
pengShuai007
pengShuai007 也看到了aop相关的动态数据源切换,实现方式跟这个有点区别,现在想搞清楚这个为啥有问题
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Springboot 切换数据源
1.下面是数据库配置文件 pool.properties #例外 eman.excepts=depv., #驱动名称 #master.dataSourceClassName=com.zaxxer.hikari.HikariDataSource #最小连接空闲数 master.minimumIdle=5 #连接池最大连接数,包括闲置和使用中的连接 master.maximumPoolSize=10...
springboot动态切换数据源
本文实现案例场景: 某系统除了需要从自己的主要数据库上读取和管理数据外,还有一部分业务涉及到其他多个数据库,要求可以在任何方法上可以灵活指定具体要操作的数据库。 为了在开发中以最简单的方法使用,本文基于注解和AOP的方法实现,在spring boot框架的项目中,添加本文实现的代码类后,只需要配置好数据源就可以直接通过注解使用,简单方便。 配置文件配置内容为: ...
springboot数据源切换
一朋友应聘到新公司,结果不会写数据源切换,只好帮他写写。 先说业务需求,和一般的数据源切换不同,这里的需求的数据源配置信息不是先配置好的,而是存在数据库之中,不同的用户登录之后,先查询到的自己的数据源配置信息,然后生成数据源,再进行数据源切换。不忍吐槽,这个架构就出了很大的纰漏,但是毕竟是需求,也就不多说什么了。 那么根据需求来分析,最主要的就是用户数据源获取和获取完之后的再生成一个数据源可供加载。
Mybatis 动态切换数据源
当数据库中采用了分库的策略(即数据库中有多个数据库),Mybatis查询时,一定要切换数据库,否则就会报Cannot determine target DataSource for lookup key [null] 错误,即找不到对应的数据库附上切换数据库的类public class DBContextHolder { private static final ThreadLocal&amp;lt;St...
Springboot MyBatis多数据源切换
Springboot MyBatis多数据源切换在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。本示例,通过两种方式实现多数据源切换 1)手动切换 2)使用注解进行切换代码结构: 简要原理:1)DataSourceType列出所有的数据源的key—key2)DataSourceContextHolder是一个线程安全的DataSourceEnum容器,并提供了向其
SpringBoot 动态切换数据源,注意问题(JPA,Mybatis兼容)
JPA多数据源 注意事项, 在同一个方法中调用自定义注解 aop 切换数据源 aop操作的 仅仅只是 替换 TreadLocal 中 线程私有的 DataSource 的key 自定义注解的使用, 下面的方法适用于, 实现JpaRepository接口的方法 public interface StudentDao extends JpaRepository&lt;Student, Intege...
SpringBoot 自定义+动态切换数据源
1、添加maven依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency>
SpringBoot根据规则切换数据源
光读写分离还不够,我要根据业务使用场景来选择数据库,比如按照省来分...
Springboot和MyBatis整合(自定义数据源,可多数据源)
Springboot和MyBatis整合(自定义数据源,可多数据源) ​ 由于我们项目中会用到根据条件不同操作不同的数据源,之前用的Springboot和JDBC整合的时候可以在JDBC里轻松选择数据源,写这个贴子则是记录在使用MyBatis时的选择和一些注意点。 pom.xml 整合主要用到的关键依赖 &amp;amp;lt;!-- mybatis整合springboot的jar包 ...
SpringBoot中的双数据源切换
在我们的项目中涉及到Oracle,Mysql数据库切换; 数据放在了Oracle上,而配置和权限管理放在了Mysql上;所以经常要在两者之间切换。 数据源切换总共有三种方法: 1 在任何地方切换。 例如我们的项目:DBContext.changeDB(DBName.IMS.getKey()) //切换Oracle DBContext.chang...
springboot 实现简单的切换数据源
springboot 有时我们实现一个简单的读写分离,此时我们可能想到的最直接的是我们代码控制实现数据源的切换,那么我就将我简单实现思路复述一下。 1.首先我们在springboot中配置我们多个数据源信息,如下关键配置: spring.datasource.url=jdbc:mysql://localhost:3306/consult spring.datasource.username=m...
springboot和mybatis的整合(单数据源)
springboot和mybatis的整合(单数据源) ​ 本篇使用yaml文件,数据源,mybatis的配置从yaml里直接读取,mapper的数据库操作sql依旧使用xml文件。链接池使用hikari 第一步:pom.xml相关主要依赖 &amp;amp;lt;!-- mybatis整合springboot的jar包 --&amp;amp;gt; &amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;gro...
springboot +mybatis,配置了数据源,启动报错
2.1.3版本会报错,2.0.5正常运行 yml文件如下: server: port: 8080 spring: datasource: name: seckill type: com.alibaba.druid.pool.DruidDataSource #druid相关配置 druid: #监控统计拦截的filters filte...
SpringBoot + Mybatis + Druid数据源demo
SpringBoot + Mybatis + Druid数据源demo ,springboot+JSP,本例是基于mybatis的配置文件,并不是注解。内有建表语句
spring_boot mybatis 动态切换数据源
                        spring_boot mybatis 动态切换数据源配置基础信息 spring.datasource.url = jdbc:mysql://xx spring.datasource.username =xx spring.datasource.password =xx spring.datasource.driverClassName = com...
springboot动态切换多个数据源(主从)
一.前言 通过springboot操作mysql数据库,但是在实际业务场景中,数据量迅速增长,一个库一个表已经满足不了我们的需求的时候,我们就会考虑分库分表的操作,在springboot中如何实现多数据源,动态数据源切换,读写分离等操作。 二.多源数据库 主要涉及的maven包 &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;groupId&amp;amp;amp;gt;com.alibaba&amp
SpringBoot多数据源AOP动态切换数据源
1.创建两个数据库master和slave 2.在application.yml添加如下配置 spring: profiles: dev datasource: master: url: jdbc:mysql://localhost:3306/master?useUnicode=true&amp;characterEncoding=GBK us...
SpringBoot配置多数据源实现动态切换数据源
通过简单的demo实现SpingBoot多数据源配置并动态切换多数据源
springBoot Druid 动态切换数据源web监控
操作数据一般都是在DAO层进行处理, 1、可以选择直接使用JDBC进行编程 2、使用多个DataSource 然后创建多个SessionFactory,在使用Dao层的时候通过不同的SessionFactory进行处理,不过这样的入侵性比较明显,一般的情况下我们都是使用继承HibernateSupportDao进行封装了的处理,如果多个SessionFactory这样处理就是比较的麻烦了,修改的...
基于springboot的mysql,sqlserver,oracle数据源切换
1:包结构 2:多数据源装载配置类; 3:mysql,oracle,sqlserver的声明装载类; 4:实体类,持久层; 5:控制层。
SpringBoot配置JPA和mybatis双数据源
JPA配置为spring.datasource前缀,mybatis为spring.datasource.eps开头 1.创建DataSourceConfig配置类,来定义数据源 其实 @Primary表示默认,如果使用了JPA则默认使用该数据源 package com.xinyuan.core.config; import org.springframework.beans.fa...
SpringBoot项目配置Mybatis数据源(注解方式)
采用阿里的Druid做线程池; 首先在项目的build.gradle或pom文件中增加mysql或oracle的依赖 //druid连接池 compile ("com.alibaba:druid-spring-boot-starter:1.1.10") //oracle compile ("com.oracle:ojdbc14:10.2.0.3.0") //mysql compile (...
springboot + mybatis + 利用注解动态切换多数据源
在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。 yml spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver druid: first...
springboot使用mybatis实现多数据源动态切换
项目架构:springboot+dubbo+zookeeper 电商订单项目分正向和逆向两个部分:其中正向数据库记录了订单的基本信息,包括订单基本信息、订单商品信息、优惠卷信息、发票信息、账期信息、结算信息、订单备注信息、收货人信息等;逆向数据库主要包含了商品的退货信息和维修信息。数据量超过500万行就要考虑分库分表和读写分离,那么我们在正向操作和逆向操作的时候,就需要动态的切换到相应的数据库,...
springboot中mybatis多数据源动态切换实现
在开发中,动态数据源配置还是用的比较多的,比如在多数据源使用方面,又或者是在多个DB之间切换方面。这里给出一个动态数据源的配置方案,两个DB均以mysql为例。 多数据源配置引入 mybatis和mysql在springboot中的引入这里就不在说了,不了解的可以参见springboot中mysql与mybatis的引入。 数据源配置如下: datasource: master: t...
springboot使用mybatis多数据源动态切换的实现
需求:项目使用了读写分离,或者数据进行了分库处理,我们希望在操作不同的数据库的时候,我们的程序能够动态的切换到相应的数据库,执行相关的操作。 首先,你需要一个能够正常运行的springboot项目,配置mybatis并且能够正常的操作数据库(增删查改) 现在开始实现: 思路:现在项目的结构设计基本上是基于MVC的,那么数据库的操作集中在dao层完成,主要业务逻辑在service层处理,c...
Springboot整合Druid与Mybatis的多数据源切换
踩坑实录 亲测可用的springboot 整合mybatis druid 多数据源切换方案 使用注解方式更加灵活
数据源切换
数据源切换,一般应用在分库分表情况,根据不同的信息将内容存储到对应的数据库。                                                                                                                                                            ...
切换数据源
使用Spring的AbstractRoutingDataSource类来进行拓展多数据源。 该类就相当于一个dataSource的路由,用于根据key值来进行切换对应的dataSource。 首先编写DynamicDataSource类 package com.bsk.util; import org.springframework.jdbc.datasource.lookup.Abst...
SpringBoot和MyBatis集合问题
启动时出现如下情况rnLogging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.rn项目正常运行,但是这个是什么错误呢?怎么解决?
springboot 整合mybatis 问题
Whitelabel Error PagernrnThis application has no explicit mapping for /error, so you are seeing this as a fallback.rnFri Aug 31 09:37:59 GMT+08:00 2018rnThere was an unexpected error (type=Internal Server Error, status=500).rnnested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES) ### The error may exist in file [D:\????? (4)\demo\target\classes\mapper\UserMapper.xml] ### The error may involve com.example.mapper.UserMapper.getNameById ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)rnrn这是怎么回事???,, 已快崩溃,,
MyBatis之数据源
DataSourceFactory是数据源工厂,两个子类是PooledDataSourceFactory和UnpooledDataSourceFactory,唯一的区别是,PooledDataSourceFactory的构造函数初始化的是PooledDataSource。 PooledDataSource和UnpooledDataSource都是DataSource的实现类。 PooledData...
mybatis数据源
一:JNDI:(Java Naming and Directory) 1,由一个初始的命名上下文(context)及其下的任意数目的子上下文组成 2,JNDI名称空间是分层次的,与很多文件系统的目录/文件结构类似 3,初始上下文与文件系统的根类似,子上下文与子目录类似 4,JNDI层次的根是初始化上下文 5,在初始化上下文下有很多子上下文,其中之一就是jdbc 6,jdbc是子上下文保
springboot + mybatis
springboot + mybatis示例项目,非常完美的示例!
springboot mybatis
本例是springboot和mybatis整合进行crud操作的微型demo。简单明了,新手也可以很快掌握。注意,你需要使用tomcat8才能运行。
SpringBoot +mybatis
SpringBoot + mybatis(SpringBoot 集成mybatis)实现SpringBoot 快速搭建
springboot和mybatis
springboot和mybatis整合
一个Oracle数据源切换问题
当前环境: 1. Oracle数据库中存储了大量的图层数据。 2. 使用ArcGIS Server发布了100多个服务。 3. 发布服务的使用的是Oracle的Easy Connection,即IP:Port/ServiceName写法。 4. 数据库已经已经从一个服务器迁移到了另外一个服务器,两台服务器上IP相同,但是Oracle的实例名称不同。 问题需求 由于发布的服务数量比较多,数
spring动态切换数据源的问题
我用SPRING配置了两个数据源并且能够动态切换,如果不了解这个的话那就不用继续看下去了,谢谢rn我的要求是:当一个数据库当掉了的话能够自动切换到另一个数据库,如果用TRY...CATCH的话也能实现,不过还是会有风险,因为在切换的过程中也会抛出异常,也不要求用session.isConnnect来判断,因为这样的话我还不如直接配两个数据源,而且以后的代码会变的很乱,期待各位高手来解决问题~!谢谢!
SpringAOP切换数据源的问题总结
1在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut”切入点” 例如定义切入点表达式 execution(* com.sample.service.impl...(..)) execution()是最常用的切点函数,其语法如下所示: 整个表达式可以分为五个部分: 1、execution(): 表达式主体。 2、第一个号:表示返回类
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表