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

建站公司还行吗摄影赚钱的网站

建站公司还行吗,摄影赚钱的网站,做外贸网站的公司,富阳区建设局网站首页记录一个Transactional(readOnly true)注解引发的bug 一、问题代码和报错 1-1 问题代码模拟 引发这个问题的三大要素分别是#xff1a; 事务注解任意数据库操作数据库操作后执行耗时业务#xff08;耗时超过数据库配置的超时时间#xff09; //1.这里是问题的核心之一…记录一个Transactional(readOnly true)注解引发的bug 一、问题代码和报错 1-1 问题代码模拟 引发这个问题的三大要素分别是 事务注解任意数据库操作数据库操作后执行耗时业务耗时超过数据库配置的超时时间 //1.这里是问题的核心之一开启事务注解 Transactional(readOnly true) public void testBug() {//2.这里是随便一个需要连接数据库的查询操作PageInfoNeeds page getPage(new NeedsQuery());//3.这里用睡5分钟来模拟执行业务try {Thread.sleep(5*60*1000);} catch (InterruptedException e) {throw new RuntimeException(e);}//这里表示方法执行完成System.out.println(结束); }1-2 报错 Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 300,018 milliseconds ago. The last packet sent successfully to the server was 300,018 milliseconds ago. is longer than the server configured value of wait_timeout. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property autoReconnecttrue to avoid this problem.at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)at com.mysql.cj.jdbc.ConnectionImpl.commit(ConnectionImpl.java:811)at com.zaxxer.hikari.pool.ProxyConnection.commit(ProxyConnection.java:387)at com.zaxxer.hikari.pool.HikariProxyConnection.commit(HikariProxyConnection.java)at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:333)... 107 common frames omitted二、原因分析 先一句话总结报错原因业务执行完成后提交事务时数据库连接已经关闭提交失败报错。 然后来细说这个报错是怎么产生的。 2-1 前提MySQL配置 首先必须提到MySQL数据库的两个配置 interactive_timeoutmysql在关闭一个非交互的连接之前所要等待的秒数 wait_timeoutmysql在关闭一个交互的连接之前所要等待的秒数 连接MySQL后通过命令可以查询到这两个配置的值在没有配置的情况下一般是默认28800秒即8小时。 SHOW VARIABLES LIKE %timeout%;也就是创建一个连接后8小时没有通过这个连接执行任意操作MySQL数据库为了节省资源就会在数据库端断开这个连接。 2-2 报错分析 从报错日志可以看出大致意思是数据库连接超时在提交事务的时候报错。 at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit(DataSourceTransactionManager.java:333)这里的连接超时就是指上面提到的数据库连接超过了配置里设置的超时时间自动断开了连接。 查询了下生产数据库的连接配置发现我设置的超时时间是180秒。 把这个过程连贯地描述一下也就是我在创建了一个数据库连接之后一段时间之后再次使用这个数据库连接发现连接已经断开于是使用失败程序抛出异常于是抛出了这段错误日志。 The last packet successfully received from the server was 300,018 milliseconds ago. The last packet sent successfully to the server was 300,018 milliseconds ago. is longer than the server configured value of wait_timeout. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property autoReconnecttrue to avoid this problem.按照日志里的描述我是在超过了300秒之后再去使用这个连接这当然是超过了我MySQL配置里的180秒的程序的异常由此产生。 那么为什么我要在把连接闲置了这么长一段时间之后再次通过这个连接操作数据库呢。 这口锅就要扣到标题所说的注解Transactional(readOnly true)上了。 这里本来是个查询方法不涉及改库的操作。但由于在方法头上加了Transactional(readOnly true)注解意味着开启只读事务所以这个方法涉及到的数据库操作就会被事务管理。 所以原本的过程 读数据库-》执行业务 在事务的管理下,变成了 开启事务-》读数据库-》执行业务-》提交事务。 异常的发生就在最后一步的 提交事务 上。 最初开启事务时创建了数据库连接-》执行了超过180秒的业务-》程序试图用之前的数据库连接去提交事务-》而连接已经断开。 提交事务这一操作就会发生异常报错由此产生。 三、解决方案 这里可以从两个方面去解决 方案1去掉事务 业务原本是读库操作并没有必须开启事务的必要性最简单的做法当然是去掉事务注解这样自然就不会因为提交事务时数据库连接已断开而报错。 方案2修改MySQL配置 归根结底异常的产生是由于数据库连接自动断开那么我们按照错误日志的提示把这个自动断开的时间设置得长一点也能阻止异常的发生。 注意直接修改查询到的MySQL配置只能改变本次连接里的设置要想永久修改必须在配置文件里修改后重启MySQL [mysqld] wait_timeout180 # 这里改成你需要的时间单位秒 interactive_timeout180 # 这里改成你需要的时间单位秒
http://www.w-s-a.com/news/986654/

相关文章:

  • 个人网页设计步骤网站没有内容 能做优化吗
  • 专业网站建设公司招聘网站排行榜
  • 网站建设规范方法企业解决方案架构
  • ae做网站导航wordpress门户
  • 重庆市网站备案材料云南做网站
  • 网页设计模板网站免费珠海视窗网
  • 茂名模板建站定制WordPress注册不提示
  • 陕西营销型手机网站建设深圳制作网站服务
  • 受欢迎的锦州网站建设Wordpress 图片左右滑动
  • 湖南优化网站建设线上网站建设需求
  • 建什么类型的网站访问量比较大哪些外包公司比较好
  • php网站地图外贸建站哪家强外贸网站怎么做
  • 宁波五金网站建设中国建筑网官网投诉查询
  • 哪个网站注册域名便宜免费流程图制作网站
  • 潍坊做网站南宁网站seo优化公司
  • 网站建设的基本技术步骤无网站营销
  • 我国旅游网站的建设网站开发 混合式 数据库
  • 淘宝客网站域名家居网站开发项目计划书
  • 网站打不开显示asp苏州注册公司需要多少钱
  • 凡科建站登录官网wordpress主题有什么用
  • 西安双语网站建设怎么做网页动图
  • 宝安自适应网站建设无锡新区企业网站推广
  • 肇庆建设局网站cpanel 安装wordpress
  • 长春启做网站多少怎样换wordpress域名
  • 山西网站建设情况汇总vs2010 c 建设网站
  • 网站推广策划书 精品深圳市住建局和建设局官网
  • 住房和城乡建设部干部学院网站一般做公司网站需要哪几点
  • 网站制作流程详解(学做网站第一步)免费个人网站模版ps
  • 狮山网站建设公司微信平台软件开发
  • 绥芬河网站建设学网站开发的能找什么工作