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

阿里云网站备案幕布郴州市建设网站

阿里云网站备案幕布,郴州市建设网站,免费企业网站建立,软件技术专升本可以报什么专业JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) t…

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

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

需要单独增加Mybatis的配置

    @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 初始化时加入拦截器的配置

@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 初始化时, 把数据源重新设置成有主从配置的数据源

@Override
public 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.yayakq.cn/news/581058/

相关文章:

  • 地税网站如何做税种确认手机网站制作流程图
  • 优秀网站架构百度网站的优势
  • 贵州政务网站建设规范网站开发常用技术
  • 现实有有哪里学做网站的app开发费用预算表格
  • 网站设计模板免费下载wordpress从数据库删除插件
  • 怎么做自己微信的网站2017网站建设
  • 台州哪里做网站wordpress4.8 汉化
  • 17网站一起做网店怎么下单wordpress 联系
  • 网站快照不更新原因必应搜索引擎网站
  • 西安网站制作顶尖装修设计装饰
  • 网站建设kuhugz睢宁做网站公司
  • 网站建设哪些会影响价格如何开通网上商城
  • 注册网站排名公司网站建设毕业设计提问
  • 网站建设哪里有龙江人社 pp
  • 网站建设服务合同模板网站优化用户体验
  • 网站建设投标书报价表开源的企业网站管理系统
  • 辽宁省城乡住房和建设厅网站亳州蒙城网站建设
  • 福永外贸网站建设公司做网站的咋挣钱
  • 怎么做网站vr哪家公司做得好
  • 南宁网站建设公司怎么赚钱校园网站建设背景
  • 免费网站404免费进入企业网站的维护工作要怎么做
  • 广州公司网站制作费用wordpress教程 pdf下载地址
  • 承接婚庆公司网站建设简易网站模板
  • 网站建设 蜂图网络如何把jQuery特效做网站背景
  • 网站做支付需要什么备案电视台做网站还是APP
  • 南京做公司网站的公司哪家好网站托管外包
  • 云空间可以做网站开发公司工程项目经理岗位职责及工作内容
  • 重庆如何快速制作一个网站鄞州区网站建设
  • 章丘网站建设公司内江建设网站
  • 西安建设学院网站公司网站建设怎么入账