zoukankan      html  css  js  c++  java
  • springboot 整合 mybatis 多数据源配置

    一、mysql的多数据源的配置

    1. 项目结构
    包名 说明
    com.kk.configuration 数据库配置层
    com.kk.testcss.controller 控制层
    com.kk.testcss.dao 数据库操作层,又分了不同的两个包,分别操作数据源1 和 数据源2
    com.kk.testcss.service 业务逻辑层
    com.kk.model 实体类
    com.kk.Application 启动类
    2.数据库配置

    springboot 主配置文件 application.properties 文件添加数据库的基本信息

    #数据源1
    network.datasource.url=jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
    network.datasource.username=root
    network.datasource.password=root
    network.datasource.driverClassName=com.mysql.jdbc.Driver
    
    #数据源2
    message.datasource.url=jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
    message.datasource.username=root
    message.datasource.password=root
    message.datasource.driverClassName=com.mysql.jdbc.Driver
    
    3. 需要导入的依赖

    pom.xml 文件如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.kk</groupId>
    	<artifactId>csstestdemo1</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>csstestdemo1</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.8.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-thymeleaf</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>1.3.0</version>
    		</dependency>
    		<!-- Druid 数据连接池依赖  不能支持sqlserver 2000-->
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.0.25</version>
    		</dependency>
    
    		<!--sql server 2000 依赖-->
    		<dependency>
    			<groupId>com.microsoft</groupId>
    			<artifactId>sql-server</artifactId>
    			<version>1.0.0</version>
    			<scope>system</scope>
    			<systemPath>${project.basedir}/src/main/resources/lib/mssqlserver2.jar</systemPath>
    		</dependency>
    
    		<!--freemarker前端页面模板依赖-->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-freemarker</artifactId>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    
    4. 项目结构

    5. 多数据源配置
    1. 编写数据源1的配置类
    package com.kk.configuration;
    import com.kk.testcss.utils.InitialDatabase;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = com.kk.configuration.NetworkConfig.PACKAGE, sqlSessionFactoryRef = "NetworkSqlSessionFactory")
    public class NetworkConfig {
        static final String PACKAGE = "com.kk.testcss.dao.network";
        static final String MAPPER_LOCATION = "classpath:mapper/network/*.xml";
    
        @Value("${network.datasource.driverClassName}")
        private String driverClass;
    
        @Value("${network.datasource.url}")
        private String url;
    
        @Value("${network.datasource.username}")
        private String user;
    
        @Value("${network.datasource.password}")
        private String password;
    
        @Bean(name = "NetworkDataSource")
        @Primary
        public DataSource NetworkDataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driverClass);
            dataSource.setUrl(url);
            dataSource.setUsername(user);
            dataSource.setPassword(password);
            return dataSource;
        }
    
        @Bean(name = "NetworkTransactionManager")
        @Primary
        public DataSourceTransactionManager NetworkTransactionManager() {
            return new DataSourceTransactionManager(NetworkDataSource());
        }
    
        @Bean(name = "NetworkSqlSessionFactory")
        @Primary
        public SqlSessionFactory NetworkSqlSessionFactory(@Qualifier("NetworkDataSource") DataSource NetworkDataSource) throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(NetworkDataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(com.kk.configuration.NetworkConfig.MAPPER_LOCATION));
            return sessionFactory.getObject();
        }
    }
    
    1. 编写数据源2的配置类
    package com.kk.configuration;
    
    import com.microsoft.jdbcx.sqlserver.SQLServerDataSource;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = com.kk.configuration.MessageConfig.PACKAGE, sqlSessionFactoryRef = "MessageSqlSessionFactory")
    public class MessageConfig {
        static final String PACKAGE = "com.kk.testcss.dao.message";
        static final String MAPPER_LOCATION = "classpath:mapper/message/*.xml";
    
        @Value("${message.datasource.driverClassName}")
        private String driverClass;
    
        @Value("${message.datasource.url}")
        private String url;
    
        @Value("${message.datasource.username}")
        private String user;
    
        @Value("${message.datasource.password}")
        private String password;
    
        @Bean(name = "MessageDataSource")
        @Primary
        public DataSource NetworkDataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driverClass);
            dataSource.setUrl(url);
            dataSource.setUsername(user);
            dataSource.setPassword(password);
            return dataSource;
        }
    
        @Bean(name = "MessageTransactionManager")
        public DataSourceTransactionManager MessageTransactionManager() {
            return new DataSourceTransactionManager(MessageDataSource());
        }
    
        @Bean(name = "MessageSqlSessionFactory")
        public SqlSessionFactory MessageSqlSessionFactory(@Qualifier("MessageDataSource") DataSource MessageDataSource) throws Exception {
            final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(MessageDataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(com.kk.configuration.MessageConfig.MAPPER_LOCATION));
            return sessionFactory.getObject();
        }
    }
    
    1. @Primary 标志这个 Bean 如果在多个同类 Bean 候选时,该 Bean 优先被考虑。「多数据源配置的时候注意,必须要有一个主数据源,用 @Primary 标志该 Bean」
    2. @MapperScan 扫描 Mapper 接口并容器管理
    3. @Value 获取全局配置文件 application.properties 的 kv 配置,并自动装配
      sqlSessionFactoryRef 表示定义了 key ,表示一个唯一 SqlSessionFactory 实例
  • 相关阅读:
    多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果
    多线程篇六:线程池
    微服务学习和认识
    多线程篇五:多个线程访问共享对象和数据的方式
    多线程篇四:ThreadLocal实现线程范围内变量共享
    多线程篇三:线程同步
    多线程篇二:定时任务
    多线程篇一:传统线程实现方式
    Jms学习篇二:ActiveMQ
    04-运算符
  • 原文地址:https://www.cnblogs.com/phtjzzj/p/7892241.html
Copyright © 2011-2022 走看看