微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mybatis多数据源切换实现代码

这篇文章主要介绍了Mybatis多数据源切换实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这次要完成的是从一个数据库中读取数据,然后再把数据插入到另一个数据库中。在同一套项目代码中要完成这个操作,就不可避免的涉及到了多数据源。本文即介绍在mybatis中完成多数据源的切换相关内容

指定数据源一

@Configuration // 扫描 Mapper 接口并容器管理 @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mastersqlSessionFactory") public class MasterDataSourceConfig { // 精确到 master 目录,以便跟其他数据源隔离 static final String PACKAGE = "com.datareach.kafka.dao.master"; static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; //application.yml中的值可以通过@Value注解进行读取 @Value("${master.datasource.url}") private String url; @Value("${master.datasource.username}") private String user; @Value("${master.datasource.password}") private String password; @Value("${master.datasource.driver-class-name}") private String driverClass; @Bean(name = "masterDataSource") @Primary public DataSource masterDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "masterTransactionManager") @Primary public DataSourceTransactionManager masterTransactionManager() { return new DataSourceTransactionManager(masterDataSource()); } @Bean(name = "mastersqlSessionFactory") @Primary public sqlSessionFactory mastersqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource) throws Exception { final sqlSessionfactorybean sessionFactory = new sqlSessionfactorybean(); sessionFactory.setDataSource(masterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(MasterDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getobject(); } }

数据源一的相关配置

# master 数据源配置 master: datasource: url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 driver-class-name: org.postgresql.Driver username: product password: initial-size: 1 min-idle: 1 max-active: 20 test-on-borrow: true max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 FROM DUAL test-While-Idle: true test-on-return: false pool-prepared-statements: false max-pool-prepared-statement-per-connection-size: 20 filters: stat,wall,log4j,config

指定数据源二

@Configuration // 扫描 Mapper 接口并容器管理 @MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondsqlSessionFactory") public class SecondDataSourceConfig { // 精确到 cluster 目录,以便跟其他数据源隔离 static final String PACKAGE = "com.datareach.kafka.dao.secondary"; static final String MAPPER_LOCATION = "classpath:mapper/secondary/*.xml"; @Value("${second.datasource.url}") private String url; @Value("${second.datasource.username}") private String user; @Value("${second.datasource.password}") private String password; @Value("${second.datasource.driver-class-name}") private String driverClass; @Bean(name = "secondDataSource") public DataSource clusterDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "secondTransactionManager") public DataSourceTransactionManager clusterTransactionManager() { return new DataSourceTransactionManager(clusterDataSource()); } @Bean(name = "secondsqlSessionFactory") public sqlSessionFactory clustersqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource) throws Exception { final sqlSessionfactorybean sessionFactory = new sqlSessionfactorybean(); sessionFactory.setDataSource(clusterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(SecondDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getobject(); } }

数据源二的相关配置

second: datasource: url: jdbc:MysqL://localhost:40000/PG_Data?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 username: root password: driver-class-name: com.MysqL.jdbc.Driver max-idle: 10 max-wait: 10000 min-idle: 5 initial-size: 5

其实就是实例化了两个sqlSessionFactory――mastersqlSessionFactory和secondsqlSessionFactory,然后通过注解@MapperScan指定扫描指定的mapper接口时用指定的sqlSessionFactory进行连接构建,从而实现了多数据源

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐