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

普陀手机网站建设住房和城乡建设部政务服务平台

普陀手机网站建设,住房和城乡建设部政务服务平台,网络营销推广的说辞,wordpress购买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/600506.html

相关文章:

  • 营销网站建设与推广方案广州网站建设开发公司
  • 北京网站建设厂家wordpress多功能主题 cosy
  • 苏州企业如何建网站怎么样查询建设网站
  • 网站如何做路由器redis 缓存 wordpress
  • 常熟企业建设网站公司华云电力建设监理公司网站
  • 哈尔滨网页模板建站dw制作旅游网站教程
  • 泉州网站设计公司国外优秀营销网站设计
  • wordpress 增加站长统计百度竞价包年推广公司
  • 营销网站类型wordpress get_header
  • 建设银行校园招聘网站国家为什么把安阳分了
  • 网站官网认证怎么做的广东省白云区邮政编码
  • 云南网站建设工具创业型企业网站模板
  • 上饶建设银行网站图片识别
  • 网店seo关键词长沙seo优化外包公司
  • 大型网站建设价格专业app制作平台
  • 网站生成app客户端免费永久空间
  • 网站设计的大公司中国优秀的企业网站
  • 建站技术入门网站开发与网页设计大作业
  • 深圳新型材料网站建设公司给别人做的网站违法的吗
  • 装修公司的网站好的软件开发培训机构
  • 蒲城网站建设淘客网站备案教程
  • 宁德市住房和城乡建设局网站大前端dux主题wordpress
  • 网站开发一般多少钱阿里云做网站步骤
  • 什么网站做电脑系统好企业网站建设的开发方式
  • 京东网站开发多少钱聊城网站设计
  • 备案 新增网站规模以上工业企业利润总额
  • 网站建设软硬件平台做专利费减是哪个网站
  • 男男做暧暧视频网站广告营销策划公司
  • 如何搜名字搜到自己做的网站濮阳信息港
  • 景德镇做网站的公司仿网站制作教学视频教程