mybatis手动切换数据库_springboot+mybatis实现动态切换数据源

本文介绍了如何在SpringBoot应用中结合MyBatis实现手动切换数据库,通过配置两个数据源(主库和从库),利用DruidDataSource创建数据源实例,并使用MultiRouteDataSource进行动态路由。配置包括主数据源、从数据源以及相应的Servlet和Filter注册。
摘要由CSDN通过智能技术生成

importjava.util.HashMap;importjava.util.Map;importjavax.annotation.Resource;importjavax.sql.DataSource;importorg.springframework.boot.web.servlet.FilterRegistrationBean;importorg.springframework.boot.web.servlet.ServletRegistrationBean;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.DependsOn;importorg.springframework.context.annotation.Primary;importcom.alibaba.druid.pool.DruidDataSource;importcom.alibaba.druid.support.http.StatViewServlet;importcom.alibaba.druid.support.http.WebStatFilter;/*** 数据源配置类

*

*@authorLynch*/@Configurationpublic classDataSourceComponent {

@ResourceprivateMasterDataSourceConfig masterDataSourceConfig;

@ResourceprivateSlaveDataSourceConfig slaveDataSourceConfig;

@Bean(name= "master")publicDataSource masterDataSource() {

DruidDataSource dataSource= newDruidDataSource();

dataSource.setUrl(masterDataSourceConfig.getUrl());

dataSource.setUsername(masterDataSourceConfig.getUsername());

dataSource.setPassword(masterDataSourceConfig.getPassword());

dataSource.setDriverClassName(masterDataSourceConfig.getDriverClassName());returndataSource;

}

@Bean(name= "slave")publicDataSource slaveDataSource() {

DruidDataSource dataSource= newDruidDataSource();

dataSource.setUrl(slaveDataSourceConfig.getUrl());

dataSource.setUsername(slaveDataSourceConfig.getUsername());

dataSource.setPassword(slaveDataSourceConfig.getPassword());

dataSource.setDriverClassName(slaveDataSourceConfig.getDriverClassName());returndataSource;

}

@Primary//不加这个会报错。

@DependsOn({ "master", "slave"}) //解决数据库循环依赖问题

@Bean(name= "multiDataSource")publicMultiRouteDataSource exampleRouteDataSource() {

MultiRouteDataSource multiDataSource= newMultiRouteDataSource();

Map targetDataSources = new HashMap<>();targetDataSources.put("master", masterDataSource());

targetDataSources.put("slave", slaveDataSource());

multiDataSource.setTargetDataSources(targetDataSources);

multiDataSource.setDefaultTargetDataSource(masterDataSource());returnmultiDataSource;

}/*** 注册ServletRegistrationBean

*

*@return

*/@BeanpublicServletRegistrationBean druidServlet() {

ServletRegistrationBean reg= newServletRegistrationBean();

reg.setServlet(newStatViewServlet());

reg.addUrlMappings("/druid/*");

reg.addInitParameter("allow", ""); //白名单 return reg;

reg.addInitParameter("loginUsername", "duan");

reg.addInitParameter("loginPassword", "123456");

reg.addInitParameter("resetEnable", "false");returnreg;

}/*** 注册FilterRegistrationBean

*

*@return

*/@BeanpublicFilterRegistrationBean filterRegistrationBean() {

FilterRegistrationBean filterRegistrationBean= newFilterRegistrationBean();

filterRegistrationBean.setFilter(newWebStatFilter());

filterRegistrationBean.addUrlPatterns("/*");

filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

filterRegistrationBean.addInitParameter("profileEnable", "true");

filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");

filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");

filterRegistrationBean.addInitParameter("DruidWebStatFilter", "/*");returnfilterRegistrationBean;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值