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

教研组网站的建设珠海网站建设制作

教研组网站的建设,珠海网站建设制作,真正的一手货源网站,如何用网站做淘宝客JPA 的读写分离配置不能应用在 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/300812.html

相关文章:

  • 郴州做网站的公司手机网站百度关键词排名查询
  • 企业网站 带后台百度最怕哪个投诉电话
  • office网站开发廊坊百度推广seo
  • 有没有做高仿手表的网站网络运营是做什么的工作
  • 安徽疫情seo网站平台
  • 制作网站协议书友点企业网站管理系统
  • 如何在网站找做贸易的客户武汉网站运营专业乐云seo
  • 建设国家标准官方网站sem竞价推广托管
  • 湛江手机网站建设网站seo推广哪家值得信赖
  • 跨境电商综合服务平台有哪些重庆seo优化
  • 有了空间和域名 网站容易做吗品牌策略
  • 南京网站制作哪家好链接是什么意思
  • 网站单页面可以做302跳转吗友情链接搜读
  • 微信优惠券网站怎么做的南宁seo标准
  • 网站获取qq号码 原理管理方面的培训课程
  • 增加wordpress页脚小工具网站优化 福州
  • 做系统之前的网站襄阳seo培训
  • 盘锦威旺做网站软文推广广告
  • 有个专门做装修的网站北京网站定制公司
  • 网络建站一般多少钱免费seo网站的工具
  • 网站有哪几种seo课程培训
  • 高端网站建站公司seo公司发展前景
  • 郴州网站陕西seo优化
  • 顺德顺的网站建设竞价托管推广
  • 做企业网站的流程潍坊网站定制模板建站
  • 邯郸市住房和城乡建设局官网站长工具seo排名查询
  • 做视频网站赚钱吗网站优化公司上海
  • 网站怎么经营南京网站制作
  • 网站建设总体说明书福州短视频seo
  • 个人备案 做政府网站网站设计师