springboot+mybatis 配置双数据源 mysql和sqlserver注意事项

pom.xml

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.0</version>
            <scope>runtime</scope>
        </dependency>

mysql 配置累

package com.etc.config;

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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"com.etc.mapper"},sqlSessionFactoryRef="first.SqlSessionTemplate")
public class MysqlDataSourceConfig {

	//mapper放在不同目录
    private static final String MAPPER_PATH = "classpath:/mappers/*Mapper.xml";

    private static final String ENTITY_PACKAGE = "com.etc.dto";

    @Bean(name = "dataSource")
    @Primary
    @Qualifier("dataSource")
    @ConfigurationProperties(prefix="spring.datasource.first")
    public DataSource getMyDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "first.SqlSessionTemplate")
    @Primary
    public SqlSessionFactory devSqlSessionFactory(
            @Qualifier("dataSource") DataSource dataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources(MAPPER_PATH));
        sessionFactory.setTypeAliasesPackage(ENTITY_PACKAGE);
        return sessionFactory.getObject();
    }

    @Bean
    @Primary
    public PlatformTransactionManager mysqlTransactionManager(@Qualifier("dataSource") DataSource mysqlDataSource)
    {
        return new DataSourceTransactionManager(mysqlDataSource);
    }
}

sqlserver 配置

package com.etc.config;

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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

//@MapperScan必须配置
@Configuration
@MapperScan(basePackages = {"com.etc.mappers"},sqlSessionFactoryRef="second.SqlSessionTemplate")
public class SqlServerDataSourceConfig {
    private static final String MAPPER_PATH = "classpath:/mapper/*.xml";

    private static final String ENTITY_PACKAGE = "com.etc.dto";

    @Bean(name = "sqlServerDataSource")
    @Qualifier("sqlServerDataSource")
    @ConfigurationProperties(prefix="spring.datasource.second")
    public DataSource getMyDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(
            @Qualifier("sqlServerDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "second.SqlSessionTemplate")
    public SqlSessionFactory devSqlSessionFactory(
            @Qualifier("sqlServerDataSource") DataSource ddataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(ddataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources(MAPPER_PATH));
        sessionFactory.setTypeAliasesPackage(ENTITY_PACKAGE);
        return sessionFactory.getObject();
    }

    @Bean
    public PlatformTransactionManager sqlServerTransactionManager(@Qualifier("sqlServerDataSource") DataSource sqlServerDataSource)
    {
        return new DataSourceTransactionManager(sqlServerDataSource);
    }

}

mapper.xml 放在不同目录

mapper.java

application.properties

spring.datasource.first.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.first.jdbc-url= jdbc:mysql://172.17.33.69:3306/etc_manager?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&noAccessToProcedureBodies=true&zeroDateTimeBehavior=convertToNull
spring.datasource.first.username=root
spring.datasource.first.password=root


spring.datasource.second.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.second.jdbc-url=jdbc:sqlserver://192.150.150.100:1433;DatabaseName=jtetc
spring.datasource.second.username=root
spring.datasource.second.password=root

sqlserver.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.etc.mappers.VtransactionMapper">
    <resultMap id="vtransactionMap" type="com.etc.dto.VTransaction">
        <id property="id" column="ID" javaType="java.lang.String"></id>
        <result property="cardNo" column="CARD_NO" javaType="java.lang.String"></result>
        <result property="accountId" column="ACCOUNT_ID" javaType="java.lang.String"></result>
        <result property="carSerial" column="CAR_SERIAL" javaType="java.lang.String"></result>
        <result property="enTime" column="EN_TIME" javaType="java.sql.Timestamp"></result>
        <result property="icTransTime" column="IC_TRANS_TIME" javaType="java.sql.Timestamp"></result>
        <result property="description" column="DESCRIPTION" javaType="java.lang.String"></result>
        <!--<result property="cash" column="CASH" javaType="java.lang.String"></result>-->
    </resultMap>

    <sql id="Base_Column_List">
      ID, CARD_NO, ACCOUNT_ID, CAR_SERIAL, EN_TIME, IC_TRANS_TIME, DESCRIPTION
  </sql>

    <select id="selectById" parameterType="java.lang.String" resultMap="vtransactionMap">
      select
        <include refid="Base_Column_List"/>
        from v_transaction
        where id = #{id}
    </select>

</mapper>
发布了9 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/J_Jorey/article/details/102923362
今日推荐