springBoot+mybatis實現多數據源配置

第一步,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



配置完畢,想配置更多數據源,都是相同套路,去測試一下唄!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章