• jeesite添加多数据源


    为了减轻一些我们数据库的压力,我们准备再配置另一个数据源。

    1.jeesite.properties 添加数据源信息,(url2,username2,pawwword2) 

    2.修改spring-context.xml(src/main/resources/)

    1> 配置两个数据源

     第一个数据源

    1. <property name="url" value="${jdbc.url}" />
    2. <property name="username" value="${jdbc.username}" />
    3. <property name="password" value="${jdbc.password}" />

     第二个数据源

    1. <property name="url" value="${jdbc2.url}" />
    2. <property name="username" value="${jdbc2.username}" />
    3. <property name="password" value="${jdbc2.password}" />

    我这里只罗列了连接地址,账号,密码。还有其他配置大家可以根据需要自行来配置

    2>将dataSource修改为dynamicDataSource 

    1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    2. <property name="dataSource" ref="dynamicDataSource"/>
    3. <property name="typeAliasesPackage" value="com.scliwei.cms"/>
    4. <property name="typeAliasesSuperType" value="com.scliwei.cms.common.persistence.BaseEntity"/>
    5. <property name="mapperLocations" value="classpath:/mappings/**/*.xml"/>
    6. <property name="configLocation" value="classpath:/mybatis-config.xml">property>
    7. bean>

    3>将dataSource修改为dynamicDataSource 

    3.添加DynamicDataSource.java(package com.scliwei.cms.modules.bus.bestpay.config)

     

    1. package com.scliwei.cms.modules.bus.bestpay.config;
    2. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
    3. //多个数据源切换
    4. public class DynamicDataSource extends AbstractRoutingDataSource {
    5. private static final ThreadLocal contextHolder = new ThreadLocal();
    6. public static String getCurrentLookupKey() {
    7. return (String) contextHolder.get();
    8. }
    9. public static void setCurrentLookupKey(String currentLookupKey) {
    10. contextHolder.set(currentLookupKey);
    11. }
    12. @Override
    13. protected Object determineCurrentLookupKey() {
    14. return getCurrentLookupKey();
    15. }
    16. }

    4测试

    在controller测试。 

    测试结果。成功

    注意:切换数据源,使用非默认的数据源的时候,使用完成要切换回来,否则有可能会发生错误。

    一定要在调用dao层之前用否则会报错

    特别注意:

    1. try {
    2. DynamicDataSource.setCurrentLookupKey("dataSource2");
    3. orderDao.updateSelective(partner);
    4. } catch (Exception e) {
    5. e.printStackTrace();
    6. } finally {
    7. DynamicDataSource.setCurrentLookupKey("dataSource");
    8. }

    因为在线上的时候 切换数据源后,有时候就会出现切换不回去,导致报错,最后加了 try catch finally 来切换回来默认的数据源

  • 相关阅读:
    高精度乘除法(超详细)
    函数式编程基本语法
    C++11:智能指针
    算法竞赛备赛进阶之背包问题训练
    git学习笔记之用命令行解决冲突
    GC 垃圾回收机制
    Vue 官方文档2.x教程学习笔记 1 基础 1.5 计算属性和侦听器 1.5.2 侦听器
    idea中dataBase模板生成
    AI时代新爬虫:网站自动转LLM数据,firecrawl深度玩法解读
    问卷设计中的常见问题
  • 原文地址:https://blog.csdn.net/wen_3370/article/details/126477892