栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

个人记录:springboot-mybatis多数据源配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

个人记录:springboot-mybatis多数据源配置

目录

pom包引入:略

yml文件配置:

代码配置:

1.Mapper基类创建:

2.数据源配置:

3.基类包扫描


使用基类继承方式实现多数据源,根据继承的接口动态切换数据源

  • pom包引入:略

  • yml文件配置:

spring:

  datasource:
    entry:
      jdbc-url: jdbc:mysql://xxx:3306/wiki_entry?characterEncoding=UTF-8&useSSL=false
      username: xxx
      password: xxx
    video:
      jdbc-url: jdbc:mysql://xxx:3306/wiki_video?characterEncoding=UTF-8&useSSL=false
      username: xxx
      password: xxx
  • 代码配置:

1.Mapper基类创建:
public interface EntryMapper {
}
public interface VideoMapper {
}

2.数据源配置:
@Configuration
public class EntryDataSourceConfig {

    @Autowired
    private MybatisInterceptor mybatisInterceptor;

    @ConfigurationProperties(prefix = "spring.datasource.entry")
    @Bean(name = "entryDataSource")
    @Primary
    public DataSource entryDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "entrySqlSessionFactory")
    public SqlSessionFactory entrySqlSessionFactory(@Qualifier("entryDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //设置分页拦截器
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{mybatisInterceptor});
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
        //驼峰配置
        sqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);
        sqlSessionFactory.getConfiguration().setLogImpl(MybatisSqlCustomLog.class);
        return sqlSessionFactory;
    }

    @Primary
    @Bean
    public DataSourceTransactionManager entryDataSourceTransactionManager(@Qualifier("entryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean
    public SqlSessionTemplate entrySqlSessionTemplate(@Qualifier("entrySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
@Configuration
public class VideoDataSourceConfig {

    @Autowired
    private MybatisInterceptor mybatisInterceptor;

    @ConfigurationProperties(prefix = "spring.datasource.video")
    @Bean(name = "videoDataSource")
    public DataSource videoDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "videoSqlSessionFactory")
    public SqlSessionFactory videoSqlSessionFactory(@Qualifier("videoDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        //设置分页拦截器
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{mybatisInterceptor});
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
        //驼峰配置
        sqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);
        sqlSessionFactory.getConfiguration().setLogImpl(MybatisSqlCustomLog.class);
        return sqlSessionFactory;
    }

    @Bean
    public DataSourceTransactionManager videoDataSourceTransactionManager(@Qualifier("videoDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate VideoSqlSessionTemplate(@Qualifier("videoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
  • MybatisInterceptor是拦截器处理分页的
    
  • MybatisSqlCustomLog是继承Slf4jImpl简单重写的日记处理

3.基类包扫描
@Configuration
public class MapperScanConfig {

    @Bean(name = "entryMapperScannerConfigurer")
    public MapperScannerConfigurer entryMapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setMarkerInterface(EntryMapper.class);
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("entrySqlSessionFactory");
        mapperScannerConfigurer.setbasePackage("com.ca.encyclopedia.api.dao");
        return mapperScannerConfigurer;
    }

    @Bean(name = "videoMapperScannerConfigurer")
    public MapperScannerConfigurer videoMapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setMarkerInterface(VideoMapper.class);
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("videoSqlSessionFactory");
        mapperScannerConfigurer.setbasePackage("com.ca.encyclopedia.api.dao");
        return mapperScannerConfigurer;
    }
}

注:

  • dao继承基类时,不能使用@Repository等注入注解
  • boot启动类上也不能@MapperScan扫描到使用上面数据源的dao路径

使用示例:

public interface WikiEntryInfoDao extends EntryMapper {

	@Select({"select * from wiki_entry_info where audit_status = 1 and id = #{id}"})
	WikiEntryInfo selectById(@Param("id") Integer id);

}
public interface WikiVideoInfoDao extends VideoMapper {
	@Select("select * from wiki_video_info where category_id = #{categoryId} and audit_status = 1 order by id desc")
	List selectByCategoryId(@Param("categoryId") Integer categoryId);
}

   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号