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

筹备网站建设彩票网站怎么做推广

筹备网站建设,彩票网站怎么做推广,公司网站如何进入后台,wordpress 读取文章因为是老项目, Spring Boot 是1.4, 使用 AbstractRoutingDataSource 来做主从切换, 配置切面类在进入事务时切换成主库, 但实际运行起来却失败, 写操作路由到了从库 查了很多文章, 试了很多方法都无效, 包括修改注解 Transactional 的 propagation 属性, 清空主从标记等等 打…

因为是老项目, Spring Boot 是1.4, 使用 AbstractRoutingDataSource 来做主从切换, 配置切面类在进入事务时切换成主库, 但实际运行起来却失败, 写操作路由到了从库

查了很多文章, 试了很多方法都无效, 包括修改注解 @Transactional 的 propagation 属性, 清空主从标记等等

打断点跟踪代码发现, 进入事务时并没有触发获取数据库连接, 而是事务里第一个查询触发了数据库连接的建立, 选择了从库, 后面的所有操作都不会触发数据源选择

后来查到这篇文章

JPA hibernate AbstractRoutingDataSource 在同一方法内使用不同数据源失败_user springboo jpa controller abstractroutingdatas-CSDN博客

通过这篇文章又找到下面的文章
Spring Data JPA 原理与实战第十一天 Session相关、CompletableFuture、LazyInitializationException_org.hibernate.resource.jdbc.spi.physicalconnection-CSDN博客
 

了解到JPA是有会话保持的, 一旦数据库链接创建在会话期内不会改变, 要想在进入事务时就选择数据源为主库, 需要修改 hibernate.connection.handling_mode 调整处理物理连接的模式。

因为我 Spring Boot  是1.4, 匹配的 hibernate 版本是5.0, 所以是把 release_mode 设置为AFTER_TRANSACTION

@Configuration
public class JpaConfig {@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory(@Qualifier("routingDataSource") DataSource dataSource) {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource);em.setPackagesToScan("com.my.domain");HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();em.setJpaVendorAdapter(vendorAdapter);// 设置 JPA 属性Properties properties = new Properties();properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");properties.setProperty("hibernate.physical_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");properties.setProperty("hibernate.implicit_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");properties.setProperty("hibernate.connection.release_mode", "AFTER_TRANSACTION");em.setJpaProperties(properties);return em;}
}

部署后又出现了新问题, 进入事务之前如果有查询操作, 还是会路由到从库, 进入事务时, 不会再触发重新获取数据源, 原因出在这部分代码 

public class LogicalConnectionManagedImpl extends AbstractLogicalConnectionImplementor {private Connection acquireConnectionIfNeeded() {if ( physicalConnection == null ) {// todo : is this the right place for these observer calls?observer.jdbcConnectionAcquisitionStart();try {physicalConnection = jdbcConnectionAccess.obtainConnection();}catch (SQLException e) {throw sqlExceptionHelper.convert( e, "Unable to acquire JDBC Connection" );}finally {observer.jdbcConnectionAcquisitionEnd( physicalConnection );}}return physicalConnection;}
}

如果之前已经获取了链接, jdbcConnectionAccess.obtainConnection() 会直接返回之前创建好的链接进行复用, 解决办法是进入事务之前不要有数据库查询操作, 把查询放到事务里

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

相关文章:

  • 合肥网页设计公司校企合作网站地图seo
  • 门户网站的案例分析开发公司总经理岗位职责
  • 网站建设与网页设计...一元购物网站开发
  • wordpress主题 排名wordpress seo文件
  • 网站建设柒首先金手指8确保网站建设又在前列
  • 找能做网站的wordpress特效主题免费
  • 电商网站开发流程图中山百度关键词搜索
  • 大淘客做的网站可以吗软件技术的了解
  • 网站开发引发的官司重庆公司网站制作公司
  • 平顶山建设街小学网站网页版微信网址是多少
  • 学院门户网站建设自评厦门网站建设系统
  • 微网站在哪个平台上搭建好 知乎常用的网站建设技术有
  • 专业做网站开发公司国内建站平台
  • 湛江做网站设计公司成都解放号网站建设
  • 西安高校定制网站建设php 企业网站管理系统
  • 桐乡网站设计怎么做打鱼网站
  • wordpress切换php版本seo百度网站排名软件
  • 中国建设银行网站属于什么机构叙述一个网站开发流程
  • 网站相似度检测 站长创意服装设计
  • 怎样在在农行网站上做风险评估电子商务网站建设与管理案例
  • 网页制作员薪资徐州seo培训
  • 国家企业官方网站查询系统wordpress 地方门户
  • 西安做网站哪里好gif在线制作
  • 公司网站建设的重要性seo在线优化工具 si
  • wordpress 迁移网站自己建设网站需要服务器
  • 试客网站建设企业网站平台建设咨询合同
  • 域名注册网站源码好利来邢台官方网站开发部
  • 建立网站来网上销售的英文建站行业span分析
  • 南京设计网站招代理商的网站
  • wordpress网站代码wordpress付费问答