栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring+mybatis多数据源

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring+mybatis多数据源

1.使用spring+mybatis构建多数据源 1.1项目环境:spring+mybatis+mysql 依赖如下 依赖注释部分开启后 可以作为SSM项目使用,下图只为测试多数据源
 

        UTF-8

        1.7

        1.7

        4.3.7.RELEASE

        1.6.6

        1.2.12

        5.1.6

        3.4.5

    



    
        
        
            org.aspectj
            aspectjweaver
            1.6.8
        

        
            org.springframework
            spring-aop
            ${spring.version}
        

        
            org.springframework
            spring-context
            ${spring.version}
        



        
            org.springframework
            spring-test
            ${spring.version}
        

        
            org.springframework
            spring-tx
            ${spring.version}
        

        
            org.springframework
            spring-jdbc
            ${spring.version}
        

        
            junit
            junit
            4.12
            compile
        

        
            mysql
            mysql-connector-java
            ${mysql.version}
        



        
        
            log4j
            log4j
            ${log4j.version}
        

        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        

        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        
        
        
        
            org.mybatis
            mybatis
            ${mybatis.version}
        
        
            org.mybatis
            mybatis-spring
            1.3.0
        
        
            c3p0
            c3p0
            0.9.1.2
            jar
            compile
        
        
        
        
            org.apache.commons
            commons-lang3
            3.8.1
        
        
            com.alibaba
            fastjson
            1.2.66
        
        
        
            org.projectlombok
            lombok
            1.18.0
        
        
        
            org.mybatis.generator
            mybatis-generator-core
            1.3.7
        



    


    

        
            
                org.mybatis.generator
                mybatis-generator-maven-plugin
                1.3.2
                
                    true
                    true
                
            
        

    

####2 配置文件

在resource下建立这样的目录,其中:
spring-com:spring配置
spring-db:spring整合Mybatis
sqlMapConfig.xml:mybatis总配置文件,也可以不写直接用spring整合
generatorConfig.xml:mybatis代码生成器
log4j.properties.xml: 日志打印设置
spring.xml: 引用上面的两个spring文件
system.properties:数据库配置等

代码如下:

spring-com




    
    
        
        
    

    

spring-db.xml




    
    
    
    
        
        
        
        
    
    
    
        
        
        
        
    
    
    
        
        
            
                
                
            
        
    
    
    
        
        
    
    
    
        
        
    

注意MultipleDataSource这个bean,他是我们使用多数据源的关键,当我们在Map中输入对应的Key时,他就会调用对应的数据源

SqlMapConfig.xml




    
        
    

generatorConfig.xml




    
    
    
        
        
        
        
            
            
        
        

            
        

        
            
        
        
            
            
            
        
        
            
        
        
            
        


        
        

log4j.properties

#设置打印级别
log4j.rootCategory=INFO, CONSOLE, LOGFILE

# 输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn

# 输出到文件
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=${catalina.base}/logs/synData/datacenter.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %mn


spring.xml





    
    



system.properties

#本地数据库配置-ivms
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
jdbc.username=root
jdbc.password=123
#本地数据库配置-swph
jdbc.driver2=com.mysql.jdbc.Driver
jdbc.url2=jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
jdbc.username2=root
jdbc.password2=123


####3.创建基本的dao和po

根据目录,我的设计是当我们使用com.xwl包下的dao时,使用数据源1;当我们使用com.zzz目录下的dao访问数据库时,使用数据源2。至于怎么实现,通过MultipleDataSource这个bean,我们有两种方式,第一种,每次调用直接手动设置数据源,这意味着我们每次调用service或者dao之前,都要去调用一遍设置的方法,所以我们使用第二种方法,aop。

#####先建立对应MultipleDataSource的类

package com.datasource;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;


public class MultipleDataSource extends AbstractRoutingDataSource {

    private static final ThreadLocal dataSourceKey = new InheritableThreadLocal();

    public static void setDataSourceKey(String dataSource) {
        dataSourceKey.set(dataSource);
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return dataSourceKey.get();
    }
}
 就这样,当我们需要手动调用数据源的时候只需要调用 MultipleDataSource.setDataSourceKey("xwl")l即可,注意这个key是我们在spring-db中配置的。

#####这样我们手动的方式就建立完毕了,接下来我自己写了一个AOP的类来自动判断路径来选择数据源,

package com.datasource;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class Data {

    @Around("execution(* com.xwl.dao.*.*(..))")
    public Object run1(ProceedingJoinPoint joinPoint) throws Throwable {
        MultipleDataSource.setDataSourceKey("xwl");
        return joinPoint.proceed();
    }

    @Around("execution(* com.zzz.dao.*.*(..))")
    public Object run2(ProceedingJoinPoint joinPoint) throws Throwable {
        MultipleDataSource.setDataSourceKey("zzz");
        return joinPoint.proceed();
    }



}

这里用了@Around标签其实有点不妥,应该使用@Before,当程序检测到我们方法的目录为com.zzz.dao时会调用zzz数据源,而无需我们手动调用。

测试
import com.xwl.dao.UserMapper;
import com.xwl.po.User;
import com.xwl.service.UserService;
import com.zzz.dao.AdminMapper;
import com.zzz.po.Admin;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;



@RunWith(SpringRunner.class)
@ContextConfiguration(value = "classpath:spring.xml")
public class demo {

    @Autowired
    public AdminMapper adminMapper;

    @Autowired
    public UserMapper userMapper;

    @Test
    public void test(){
        Admin admin = adminMapper.selectByPrimaryKey(4);
        System.out.println(admin.getUsername());
        User user = userMapper.selectByPrimaryKey(35);
        System.out.println(user.getUserName());
    }


}

结果:


成功 OK

提示:我的dao和xml都是自动生成的 就不给大家看了,毕竟ssm就是配置太多了,知道配置就可以自己琢磨了,我也是自己琢磨出来的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358138.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号