spring boot 06 - 集成mybatis多数据源动态切换

核心思路:

通过MapperScan注解直接指定每套数据库各自扫描的mapper所在包路径

最终的代码目录结构如下:


参考前一篇博客-

Spring Boot 05-集成mybatis

需要做如下修改:

pom.xml

把spring boot的版本从2.0.2,换成1.5.9

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
	</parent>

TesterMan.java

注释掉@MapperScan这一行:

@SpringBootApplication(scanBasePackages={"my.demo.**"})
//@MapperScan("my.demo.mapper.**")
public class TesterMan{
	public static void main(String[] args) {
		SpringApplication.run(TesterMan.class,args);
	}
}

db访问相关的包路径以及需要的类:

Db1MybatisConfig.java

package my.demo.dao.db1.config;

import javax.sql.DataSource;

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.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan(basePackages = { "my.demo.dao.db1.mapper.**" },
			sqlSessionFactoryRef="db1flowSessionFactory")
public class Db1MybatisConfig {
	@Bean(name = "db1")
	@ConfigurationProperties(prefix = "mysql.db1")
	public DataSource db1flowDatasource() {
		return DataSourceBuilder.create().build();
	}
	
	@Bean(name="db1SessionFactory")
	public SqlSessionFactory db1flowSessionFactory() throws Exception {
		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
		factoryBean.setDataSource(db1flowDatasource()); 
		return factoryBean.getObject();
	}

	@Bean
	public SqlSessionTemplate db1flowSessionTemplate() throws Exception {
		SqlSessionTemplate template = new SqlSessionTemplate(
				db1flowSessionFactory()); 
		return template;
	}
}

Db1DemoMapper.java

package my.demo.dao.db1.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;

public interface Db1DemoMapper {
	@Select("select * from Demo where name = #{name}")
	public List likeName(String name);
	
	@Select("select * from Demo where id = #{id}")
	public Db1DemoMapper getById(long id);
	
	@Select("select name from Demo where id = #{id}")
	public String getNameById(long id);
	
}

application.properties变成如下这样:

#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://ip:port/dbname
#spring.datasource.username=username
#spring.datasource.password=password

####mysql.db1
mysql.db1.type=com.alibaba.druid.pool.DruidDataSource
mysql.db1.driver-class-name=com.mysql.jdbc.Driver
mysql.db1.url = jdbc:mysql://ip:port/db1?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
mysql.db1.username = username
mysql.db1.password = password

####mysql.db2
mysql.db2.type=com.alibaba.druid.pool.DruidDataSource
mysql.db2.driver-class-name=com.mysql.jdbc.Driver
mysql.db2.url = jdbc:mysql://ip:port/db2?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
mysql.db2.username = username
mysql.db2.password = password

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值