springBoot+mybatis实现多数据源配置

  • 时间:
  • 来源:互联网
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xm526489770/article/details/103353071

第一步,pom.xml(因为这个项目测试多个知识点jar包引得比较多,比较乱,根据个人需求删除)

<?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>xm_demo</groupId>
    <artifactId>xm_demo</artifactId>
    <version>1.0-SNAPSHOT</version>


    <name>xm_demo Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>
    <!--Spring boot版本号-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.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>
        <fastjson.version>1.2.33</fastjson.version>
        <druid.version>1.0.14</druid.version>
        <commons.fileupload.version>1.3.1</commons.fileupload.version>
        <thymeleaf.version>3.0.8.RELEASE</thymeleaf.version>
        <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
        <thymeleaf-extras-springsecurity4.version>3.0.2.RELEASE</thymeleaf-extras-springsecurity4.version>
    </properties>

    <dependencies>
        <!--谷歌json数据格式化-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.6.2</version>
        </dependency>
        <!-- CXF webservice -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.1.11</version>
        </dependency>

        <!--thymeleaf页面标签-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--使用非严格html5格式-->
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.22</version>
        </dependency>
        <!--spring booot web 依赖关系-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--数据库连接配置,开始:-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>

        <!--数据库连接配置,结束。-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mybatis-plus相关依赖-->
        <!--<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>-->
       <!-- <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.4.2</version>
        </dependency>-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
       <!-- <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.1.8</version>
        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.41</version>
        </dependency>

        <!--httpclient支持-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.1</version>
        </dependency>

        <!--json对象依赖-->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        <!--文件上传下载依赖-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3</version>
        </dependency>
        <!-- xml解析 -->
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.3</version>
        </dependency>
        <!--quartz定时任务-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
        <!--打包的时候把如下资源全部打到工程中-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>*</include>
                    <include>**/*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

第二步,数据源配置

package com.xlt.jczb.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 javax.sql.DataSource;


/**
 * @Classname DataSourceConfig1
 * @Description 主数据源配置
 * @Date 2019/11/27 10:00
 * @Created by xm
 */

@Configuration
// 配置主数据源mapper位置
@MapperScan(basePackages = "com.xlt.jczb.mapper", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataSourceConfig1 {

    // 将这个对象放入Spring容器中
    @Bean(name = "test1DataSource")


    // 表示这个数据源是默认数据源
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource getDateSource1() {
        return DataSourceBuilder.create().build();
    }



    @Bean(name = "test1SqlSessionFactory")
    @Primary
    public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath:/com/xlt/jczb/mapper/xml/*.xml"));
        return bean.getObject();
    }


    @Bean("test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate test1sqlsessiontemplate(
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}
package com.xlt.jczb.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**
 * @Classname DataSourceConfig2
 * @Description 第二数据源配置
 * @Date 2019/11/27 10:13
 * @Created by xm
 */
@Configuration
@MapperScan(basePackages = "com.xlt.jczb.mapper2", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSourceConfig2 {
    
    
    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource getDateSource2() {
        return DataSourceBuilder.create().build();
    }

    
    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:/com/xlt/jczb/mapper2/xml/*.xml"));
        return bean.getObject();
    }

    
    @Bean("test2SqlSessionTemplate")
    public SqlSessionTemplate test2sqlsessiontemplate(
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

第三步,持久层

主数据源

package com.xlt.jczb.mapper;

import com.xlt.jczb.entity.Xtzjgl;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * 系统自检管理
 *
 * @date 2019-11-22 10:18:48
 * @author xm
 */
@Service
public interface XtzjglMapper  {


    /**
     * 查询更新
     * @param xtzjgl
     */
    void updateTime (Xtzjgl xtzjgl);

    /**
     * 查询所有
     * @param
     * @return
     */
    List<Xtzjgl> getList();

    /**
     * 查询需要消息推送列表
     * @param
     * @return
     */
    List<Xtzjgl> sendMsgList(Xtzjgl xtzjgl);

}

xtzjglMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xlt.jczb.mapper.XtzjglMapper">
  <resultMap id="BaseResultMap" type="com.xlt.jczb.entity.Xtzjgl">
    <id column="ID" jdbcType="VARCHAR" property="id" />
    <result column="JWD" jdbcType="VARCHAR" property="jwd" />
    <result column="ZBC" jdbcType="VARCHAR" property="zbc" />
    <result column="NAME" jdbcType="VARCHAR" property="name" />
    <result column="TNAME" jdbcType="VARCHAR" property="tname" />
    <result column="CNAME" jdbcType="VARCHAR" property="cname" />
    <result column="MAXTIME" jdbcType="VARCHAR" property="maxtime" />
    <result column="ZBC_NAME" jdbcType="VARCHAR" property="zbcName" />
    <result column="UPDATETIME" jdbcType="VARCHAR" property="updateTime" />
  </resultMap>

  <!-- 数据更新 -->
  <update id="updateTime"  parameterType="com.xlt.jczb.entity.Xtzjgl">
    update xtzjgl set updatetime= #{updateTime}, maxtime=(select max(${cname})  from ${tname} where
    ${zbcName}=#{zbc} ) where tName=#{tname} and cName=#{cname} and zbc=#{zbc}
  </update>

  <!--查询所有配置信息-->
  <select id="getList" resultMap="BaseResultMap" >
    select jwd,zbc,cname,tname, zbc_name from xtzjgl
  </select>

  <!--查询所有需要信息发送列表-->
  <select id="sendMsgList" resultMap="BaseResultMap" parameterType="com.xlt.jczb.entity.Xtzjgl">
    select jwd,zbc,tname, name from xtzjgl where MAXTIME is NULL or MAXTIME &lt; #{updateTime}
  </select>
</mapper>

第二数据源

package com.xlt.jczb.mapper2;

import com.xlt.jczb.entity.Xtzjgl;
import org.springframework.stereotype.Service;


/**
 * 系统自检管理
 *
 * @date 2019-11-22 10:18:48
 * @author xm
 */
//@Service
public interface XtzjglMapper2 {


    /**
     * 查询更新
     * @param xtzjgl
     */
    void updateTime(Xtzjgl xtzjgl);


    /**
     * 多数据源链接测试
     * @param xtzjgl
     */
    void updateTest(Xtzjgl xtzjgl);
}

xtzjglMapper2.xml 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xlt.jczb.mapper2.XtzjglMapper2">
  <resultMap id="BaseResultMap" type="com.xlt.jczb.entity.Xtzjgl">
    <id column="ID" jdbcType="VARCHAR" property="id" />
    <result column="JWD" jdbcType="VARCHAR" property="jwd" />
    <result column="ZBC" jdbcType="VARCHAR" property="zbc" />
    <result column="NAME" jdbcType="VARCHAR" property="name" />
    <result column="TNAME" jdbcType="VARCHAR" property="tname" />
    <result column="CNAME" jdbcType="VARCHAR" property="cname" />
    <result column="MAXTIME" jdbcType="VARCHAR" property="maxtime" />
    <result column="ZBC_NAME" jdbcType="VARCHAR" property="zbcName" />
  </resultMap>

  <!-- 数据更新 -->
  <update id="updateTime"  parameterType="com.xlt.jczb.entity.Xtzjgl">
    update xtzjgl set maxtime=(select max(${cname})  from ${tname} where
    ${zbcName}=#{zbc} ) where tName=#{tname} and cName=#{cname} and zbc=#{zbc}
  </update>

  <!--多数据源测试链接-->
  <update id="updateTest"  parameterType="com.xlt.jczb.entity.Xtzjgl">
    update xtzjgl set jwd= #{jwd} where zbc= #{zbc}
  </update>
</mapper>

第四步,业务层

package com.xlt.jczb.service;

import com.xlt.jczb.entity.Xtzjgl;

import java.util.List;


/**
 * <p>
 * 系统自检管理业务实现
 * </p>
 *
 * @author 徐明明
 * @date 2019-11-22 10:21:22
 */

public interface XtzjglService  {


    /**
     * 查询更新
     * @param xtzjgl
     */
    void updateTime (Xtzjgl xtzjgl);

    /**
     * 查询所有
     * @param
     * @return
     */
    List<Xtzjgl> getList();

    /**
     * 查询需要消息推送列表
     * @param
     * @return
     */
    List<Xtzjgl> sendMsgList(Xtzjgl xtzjgl);

    /**
     * 多数据源链接测试
     * @param xtzjgl
     */
    void updateTest(Xtzjgl xtzjgl);


}
package com.xlt.jczb.service.impl;

import com.xlt.jczb.entity.Xtzjgl;
import com.xlt.jczb.mapper.XtzjglMapper;
import com.xlt.jczb.mapper2.XtzjglMapper2;
import com.xlt.jczb.service.XtzjglService;
import com.xlt.jczb.util.HttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


/**
 * <p>
 * 系统自检管理
 * </p>
 *
 * @author 徐明明
 * @date 2019/07/24
 */
@Service
public class XtzjglServiceImpl  implements XtzjglService {

    private static final Logger log=LoggerFactory.getLogger(XtzjglServiceImpl.class);

    //消息发送地址
    @Value("${sendMsgUrl}")
    private String sendMsgUrl;

    //整备场ID
    @Value("${baseInfo.zbcid}")
    private String deptid;

    //系统自检持久层
    @Autowired
    private XtzjglMapper xtzjglMapper;

    //第二数据源
    @Autowired
    private XtzjglMapper2 xtzjglMapper2;

    /**
     * 系统自检数据更新
     * @param xtzjgl
     */
    @Override
    public void updateTime(Xtzjgl xtzjgl) {
        xtzjglMapper.updateTime(xtzjgl);
    }

    @Override
    public List<Xtzjgl> getList() {
        return xtzjglMapper.getList();
    }

    @Override
    public List<Xtzjgl> sendMsgList(Xtzjgl xtzjgl) {
        return xtzjglMapper.sendMsgList(xtzjgl);
    }

   

    @Override
    public void updateTest(Xtzjgl xtzjgl) {
        xtzjglMapper2.updateTest(xtzjgl);
    }





}

第五步,前端控制器

package com.xlt.xfzb.controller;


import com.xlt.xfzb.entity.Xtzjgl;
import com.xlt.xfzb.service.XtzjglService;
import com.xlt.xfzb.service.impl.XtzjglServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;


/**
 * <p>
 *
 * </p>
 *
 * @author 徐明明
 * @date 2019/07/24
 */
@Controller
@CrossOrigin
@RequestMapping("Xtzjgl")
public class XtzjglController {

    @Autowired
    private XtzjglService xtzjglService;

    /**
     * 测试接口
     *
     * @return
     */
    @GetMapping("save")
    public ResponseEntity save(Xtzjgl xtzjgl) {
        System.out.println("执行了!!!!!!");
        //查询主库数据
        List<Xtzjgl> test = xtzjglService.getTest();
        //更新到第二数据源
        xtzjglService.updateTest(test.get(0));
        return new ResponseEntity("成功!!",HttpStatus.OK);
    }

    


}

第六步,application.yml

server:
  port: 8081 # 应用程序监听的web端口
  max-http-header-size: 4048576

spring:
  #应用名称
  application:
    name: scheduling_xfzb
  #配置文件
  profiles:
    active: dev
  #页面模板
  thymeleaf:
    mode: LEGACYHTML5
    cache: false
    content-type: text/html
    encoding: UTF-8
  #附件上传大小限制
  http:
    multipart:
      maxRequestSize: 100MB
      maxFileSize: 100MB
      max-file-size: 100MB #上传文件的大小限定
      max-request-size: 100MB #上传请求数据的大小限定





application-dev.yml


#多数据源配置
spring:
  datasource:
        test1:
          username: xfzb
          password: xfzb
          url: jdbc:oracle:thin:@127.0.0.1:1521:swwgorcl
          driver-class-name: oracle.jdbc.driver.OracleDriver
          druid:
            initial-size: 5
        test2:
          username: xazb
          password: xazb
          url: jdbc:oracle:thin:@127.0.0.1:1521:swwgorcl
          driver-class-name: oracle.jdbc.driver.OracleDriver
          druid:
            initial-size: 6



配置完毕,想配置更多数据源,都是相同套路,去测试一下呗!

本文链接http://element-ui.cn/news/show-501.aspx