当前位置: 首页 > wzjs >正文

教研组网站的建设全网最低价24小时自助下单平台

教研组网站的建设,全网最低价24小时自助下单平台,上海建筑建材业网招标,织梦导入wordpressJPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Configuration public class MyBatisConfig {Beanpublic SqlSessionFactory…

JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理

为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源

需要单独增加Mybatis的配置

@Configuration
public class MyBatisConfig {@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);// 注册插件sessionFactory.setPlugins(new Interceptor[]{new DataSourceInterceptor()});return sessionFactory.getObject();}
}

部署后发现没有生效, 打断点发现 SqlSessionFactoryBean 没有注册成功, 因为是老项目, 引入的包里已经有一个  Mybatis 的配置了, 我不能直接覆盖, 所以用 BeanPostProcessor 来在原有 SqlSessionFactoryBean 初始化时加入拦截器的配置

@Configuration
public class MyBatisConfig {@Bean@ConditionalOnBean(name="routingDataSource")public BeanPostProcessor sqlSessionFactoryBeanPostProcessor(@Qualifier("routingDataSource") DataSource routingDataSource) {return new BeanPostProcessor() {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof SqlSessionFactory) {SqlSessionFactory SqlSessionFactory = (SqlSessionFactory) bean;try {SqlSessionFactory.getConfiguration().addInterceptor(new DataSourceInterceptor());} catch (Exception e) {throw new RuntimeException(e);}}return bean;}};}
}

部署后发现还是未生效, 调试发现是引入的包里已经定义了一个默认的数据源,而且标注了@Primary, 而原有 Mybatis 的配置里直接使用了这个数据源

于是使用了一个hack的方法, 使用反射在 Mybatis 配置 SqlSessionFactoryBean 初始化时, 把数据源重新设置成有主从配置的数据源

@Configuration
public class MyBatisConfig {@Bean@ConditionalOnBean(name="routingDataSource")public BeanPostProcessor sqlSessionFactoryBeanPostProcessor(@Qualifier("routingDataSource") DataSource routingDataSource) {return new BeanPostProcessor() {
@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof SqlSessionFactory) {try {SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) bean;org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();// 使用反射或其他方式修改配置中的数据源Field dataSourceField = configuration.getEnvironment().getClass().getDeclaredField("dataSource");dataSourceField.setAccessible(true);dataSourceField.set(configuration.getEnvironment(), routingDataSource);} catch (Exception e) {throw new BeansException("Failed to modify SqlSessionFactory", e) {};}}return bean;}};}
}

再次部署测试通过

http://www.dtcms.com/wzjs/451640.html

相关文章:

  • 南开做网站关键词排名优化流程
  • dede资讯类网站模板网推公司
  • 微信公众号小程序怎么开发哈尔滨网站优化
  • 福州做网站需要多少钱百度企业查询
  • 网站建设公司转型北京seo排名方法
  • 百度搜索推广流程seo如何快速排名
  • 高校网站建设招标公告外链网站推荐几个
  • 做外贸有效的网站网络营销推广及优化方案
  • 开题报告风景区网站开发网站seo优化方案项目策划书
  • 自己有域名怎么做免费网站设计案例网
  • 盘县网站开发新能源汽车公司
  • 二人世界视频免费宁波优化网站哪家好
  • 网站建设公司哪家强seo教程视频
  • 南宁门户网站广州网站维护
  • 深圳市企业网站seo写手接单平台
  • 做兼职什么网站产品推广朋友圈文案
  • 网站建设 技术方案公司官网制作多少钱
  • 网站标题前的小图标怎么做开封网站优化公司
  • 政府网站建设工作方案首页关键词优化公司
  • dede做的网站弹广告销售成功案例分享
  • 佛山网站开发公司b站引流推广
  • 做购物网站需要什么国内新闻最新消息今天简短
  • 邪恶做动态网站廊坊seo整站优化软件
  • 嘉兴网站托管郑州网站seo外包公司
  • 如何制作免费网站今日疫情最新消息全国31个省
  • 一流的常州网站建设上海网站建设关键词排名
  • iis部署网站 http 500 - 内部服务器错误杭州百度推广优化排名
  • 山西省住房建设厅网站房屋建筑定额今天刚刚的最新新闻
  • 网站开发一定要学java吗学管理培训班去哪里学
  • 网站建设顾问做网站怎么做