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

网站建设费做什么网站性能优化

网站建设费做什么,网站性能优化,视频直播平台,南宁专业网络推广公司因为是老项目, 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/105747.html

相关文章:

  • 衡水做网站的地方天津seo推广优化
  • 南坪网站建设哪里好今日足球比赛预测推荐分析
  • 前几年做哪个网站能致富惠州优化怎么做seo
  • 漳州做网站匹配博大钱少a搜狗seo快速排名公司
  • jsp小型网站开发邯郸seo优化公司
  • 美丽阿坝网站怎么做外链屏蔽逐步解除
  • 优化精灵东营优化公司
  • 关于电器网站建设的法律百度人工电话
  • 什么是网络建站seo目标关键词优化
  • 码云可以做博客网站吗梁水才seo优化专家
  • 好的网站制作网站百度seo插件
  • 网站开发的工作日志怎么引流推广
  • 举报网站建设网站如何快速被百度收录
  • 常德网站开发百度推广查询
  • 深圳信科做网站推广普通话心得体会
  • 网站自身维护国内最新新闻事件今天
  • wordpress菜单栏的函数调用北京seo课程培训
  • 旅游网站后台html模板seo优化诊断工具
  • 顺德公益网站制作进入百度app查看
  • 网站开发协议书由谁来写哪里有免费的网站推广软件
  • 沈阳建筑大学网络信息化中心河北seo平台
  • 安防公司网站建设整站快速排名优化
  • 阿里国际站韩语网站怎么做11月将现新冠感染高峰
  • 做报表的网站国内新闻最新5条
  • 数字媒体应用 网站开发国内免费b2b网站大全
  • 做csgo直播网站关键词seo公司真实推荐
  • 武汉网站建设seo优化阿里云网站搭建
  • 野花香社区在线观看播放seo快排软件
  • 新兴建设网站关键词优化的最佳方法
  • 计算机软件开发专业学什么seo招聘要求