Spring Boot整合MyBatis多數據源問題

駝峯映射失效

  • ·application.properties·
server.servlet.context-path=/springboot11
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.url=jdbc:mysql:///springboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.one.username=root
spring.datasource.one.password=root

spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.url=jdbc:mysql:///mybatis?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
spring.datasource.two.username=root
spring.datasource.two.password=root

mybatis.configuration.one.map-underscore-to-camel-case=true
mybatis.configuration.two.map-underscore-to-camel-case=true
  • 其中一個數據源配置
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.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;

/**
 * 2020-05-19 19:08
 *
 * @author cnkeysky
 */
@Configuration
@MapperScan(basePackages = "org.example.mapper", sqlSessionTemplateRef = "sqlSessionTemplateOne")
public class MybatisConfigOne {

    @Resource(name = "dsOne")
    DataSource dataSource;

	// 加載mybatis屬性配置
    @Bean
    @ConfigurationProperties("mybatis.configuration.one")
    org.apache.ibatis.session.Configuration configurationOne() {
        return new org.apache.ibatis.session.Configuration();
    }

    SqlSessionFactory sqlSessionFactoryOne() {
        SqlSessionFactory factory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            // 指定配置
            bean.setConfiguration(configurationOne());
            factory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return factory;
    }

    @Bean("sqlSessionTemplateOne")
    SqlSessionTemplate sqlSessionTemplateOne() {
        return new SqlSessionTemplate(sqlSessionFactoryOne());
    }
}
  • 另一個數據源配置
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.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * 2020-05-19 19:09
 *
 * @author cnkeysky
 */
@Configuration
@MapperScan(basePackages = "org.example.mapper2", sqlSessionTemplateRef = "sqlSessionTemplateTwo")
public class MybatisConfigTwo {

    @Resource(name = "dsTwo")
    DataSource dataSource;

    @Bean
    @ConfigurationProperties("mybatis.configuration.two")
    org.apache.ibatis.session.Configuration configurationTwo() {
        return new org.apache.ibatis.session.Configuration();
    }


    SqlSessionFactory sqlSessionFactoryTwo() {
        SqlSessionFactory factory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setConfiguration(configurationTwo());
            factory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return factory;
    }

    @Bean("sqlSessionTemplateTwo")
    SqlSessionTemplate sqlSessionTemplateTwo() {
        return new SqlSessionTemplate(sqlSessionFactoryTwo());
    }
}

Cannot use both: sqlSessionTemplate and sqlSessionFactory together. sqlSessionFactory is ignored

  • SqlSessionFactory 不要使用@Bean
  • @MapperScan去除sqlSessionFactoryRef,參看上面的配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章