mybatis 配置多数据源 java,Mybatis多数据源配置

1.application.properties文件配置配合数据源

spring.datasource.query1.jdbc-url=jdbc:mysql://192.168.0.112:3306/secms_ods?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true

spring.datasource.query1.username=root

spring.datasource.query1.password=

spring.datasource.query1.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.query2.jdbc-url=jdbc:mysql://192.168.0.112:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true

spring.datasource.query2.username=root

spring.datasource.query2.password=

spring.datasource.query2.driver-class-name=com.mysql.jdbc.Driver

mybatis.config-location=classpath:mybatis/mybatis-config.xml

2.数据源配置

@Configuration

@MapperScan(basePackages="com.jiafeng.dao.query1",sqlSessionTemplateRef="query1SqlSessionTemplate")

public class DataSource1Config {

@Bean(name = "query1DataSource") //配置数据源名称

@ConfigurationProperties(prefix = "spring.datasource.query1") //将配置文件中数据源配置信息注入到该数据源

@Primary //Primary可以理解为默认优先选择,同时不可以同时设置多个

public DataSource query1DataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name="query1SqlSessionFactory")

@Primary

public SqlSessionFactory query1SqlSessionFactory(@Qualifier("query1DataSource")DataSource dataSource) throws Exception {

SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

bean.setDataSource(dataSource);

//数据源注入到mapper.xml文件

bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/query1/*.xml"));

return bean.getObject();

}

@Bean(name="query1TransactionManager")

@Primary

public DataSourceTransactionManager query1TransactionManager(@Qualifier("query1DataSource")DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Bean(name="query1SqlSessionTemplate")

@Primary

public SqlSessionTemplate query1SqlSessionTemplate(@Qualifier("query1SqlSessionFactory")SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

一层一层注入,首先创建 DataSource,然后创建 SqlSessionFactory 再创建事务,最后包装到 SqlSessionTemplate 中。其中需要指定分库的 mapper 文件地址,以及分库dao层代码。

@MapperScan(basePackages="com.jiafeng.dao.query1",sqlSessionTemplateRef="query1SqlSessionTemplate")

配置扫描的dao层:com.jiafeng.dao.query1,并将dao层注入到query1SqlSessionTemplate中。

第二个数据源配置

@Configuration

@MapperScan(basePackages="com.jiafeng.dao.query2",sqlSessionTemplateRef="query2SqlSessionTemplate")

public class DataSource2Config {

@Bean(name = "query2DataSource")

@ConfigurationProperties(prefix = "spring.datasource.query2")

public DataSource query1DataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name="query2SqlSessionFactory")

public SqlSessionFactory query1SqlSessionFactory(@Qualifier("query2DataSource")DataSource dataSource) throws Exception {

SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

bean.setDataSource(dataSource);

//数据源注入到mapper.xml文件

bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/query2/*.xml"));

return bean.getObject();

}

@Bean(name="query2TransactionManager")

public DataSourceTransactionManager query1TransactionManager(@Qualifier("query2DataSource")DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Bean(name="query2SqlSessionTemplate")

public SqlSessionTemplate query1SqlSessionTemplate(@Qualifier("query2SqlSessionFactory")SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

3.dao层实现

package com.jiafeng.dao.query1;

import com.jiafeng.domain.User;

public interface SysUserMapper {

User findUserByName(String userName);

}

package com.jiafeng.dao.query2;

import com.jiafeng.domain.Role;

public interface RoleMapper {

Role getRoleById(String id);

}

mapper文件

SELECT user_id,user_name,`password` FROM `user` WHERE user_name=#{userName}

SELECT role_id,`name`,`role_key` FROM `role` WHERE role_id=#{id}

注意:dao 层和 xml 需要按照库来分在不同的目录,不同数据源按照配置不同的路径进行注入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值