当前位置: 首页 > 编程日记 > 正文

HikariPool 连接池问题

前言:今天在一个项目运行的时候发现一个很奇怪的问题,当我有一段时间无操作之后再进行插入操作的话,就会出现HikariPool相关的报错,在此记录一下

问题

2022-02-20 13:14:04.178  WARN 4012 --- [nio-8888-exec-6] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@4d500615 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2022-02-20 13:14:09.192  WARN 4012 --- [nio-8888-exec-6] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3cf85fe2 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2022-02-20 13:14:14.202  WARN 4012 --- [nio-8888-exec-6] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@b4f2dcd (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2022-02-20 13:14:19.220  WARN 4012 --- [nio-8888-exec-6] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@35b6e8f2 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2022-02-20 13:14:24.231  WARN 4012 --- [nio-8888-exec-6] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1adb52ad (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2022-02-20 13:14:29.237  WARN 4012 --- [nio-8888-exec-6] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2e9842de (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2022-02-20 13:14:29.243 ERROR 4012 --- [nio-8888-exec-6] c.g.d.h.ControllerExceptionHandler       : Request URL : /admin/blogs/10/input,Exception : {}org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.
### The error may exist in file [F:\Code\GithubRepository\MyBlog-MyBatis\demo1\target\classes\mapping\TypeDao.xml]
### The error may involve com.gcl.demo1.dao.TypeDao.findAllType
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)at com.sun.proxy.$Proxy80.selectList(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)at com.sun.proxy.$Proxy86.findAllType(Unknown Source)at com.gcl.demo1.service.impl.TypeServiceImpl.listType(TypeServiceImpl.java:46)at com.gcl.demo1.service.impl.TypeServiceImpl$$FastClassBySpringCGLIB$$17f81c71.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)at com.gcl.demo1.service.impl.TypeServiceImpl$$EnhancerBySpringCGLIB$$ce851177.listType(<generated>)at com.gcl.demo1.controller.admin.BlogController.setTypeAndTag(BlogController.java:67)at com.gcl.demo1.controller.admin.BlogController.editInput(BlogController.java:73)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:807)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.
### The error may exist in file [F:\Code\GithubRepository\MyBlog-MyBatis\demo1\target\classes\mapping\TypeDao.xml]
### The error may involve com.gcl.demo1.dao.TypeDao.findAllType
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)at sun.reflect.GeneratedMethodAccessor101.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)... 64 common frames omitted
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:143)at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)at com.sun.proxy.$Proxy115.query(Unknown Source)at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)... 70 common frames omitted
Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)... 82 common frames omitted
Caused by: java.sql.SQLNonTransientConnectionException: No operations allowed after connection closed.at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:73)at com.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2498)at com.zaxxer.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:560)at com.zaxxer.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:173)at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)... 87 common frames omitted
Caused by: com.mysql.cj.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)at com.mysql.cj.NativeSession.checkClosed(NativeSession.java:1171)at com.mysql.cj.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:576)at com.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2494)... 90 common frames omitted2022-02-20 13:14:29.244  WARN 4012 --- [nio-8888-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.
### The error may exist in file [F:\Code\GithubRepository\MyBlog-MyBatis\demo1\target\classes\mapping\TypeDao.xml]
### The error may involve com.gcl.demo1.dao.TypeDao.findAllType
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30087ms.]

问题描述:
腾讯云上 centos7 安装的 mysql 5.7.27,SpringBoot 使用 Hikaricp 连接池连接 MySQL。

项目启动,第一次连接成功初始化连接池,连接无问题,无任何操作大概10几分钟的样子,连接池的连接全部失效。

分析

在报错前出现过几个这样的警告:
HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@73888329 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value
验证连接 ConnectionImpl@73888329 失败(连接关闭后不允许操作)。 可能考虑使用更短的maxLifetime值。

然后报错原因是连接超时,Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30061ms.,也就是连接池里面的连接全都连接不上,最后导致连接超时。

我们先捋一捋连接池的原理
当我们使用连接池中的连接连接数据库的时候,连接池会建立一条新的连接,如下图:
请添加图片描述
这条新的连接原来就与数据库产生了连接,只是一直存放在连接池里面没有使用(因为频繁地创建和销毁连接是一个占用资源的活动)。

程序与连接池的连接有存活时长,连接池中的连接和数据库的连接当然也有存活时长,MySQL 闲置连接的超时时间由 wait_timeout 控制,默认是8小时,如下图:
在这里插入图片描述

这里我猜想是不是我们获取到的这条连接在数据库那里超时了,但是很快我就发现不是这样的。
在这里插入图片描述

我查询了一下数据库中的所有连接信息,发现连接时间最长的都远远没有8个小时(PS:这是我后面复现了一遍这个错误前查出来的数据)…

这里先说一下,SpringBoot 使用的默认连接池为 Hikari ,它也被称为速度最快的连接池,它的连接最大存活时间(max-lifetime)的默认值是30分钟。

请添加图片描述

问题出来了,上面提到过MySQL的连接超时时间是8个小时,怎么看30分钟都不可能大于8个小时啊!!!

网上也有人遇到相同的问题,但是他们只给出了解决方法——就是减少max-lifetime的时间,并没有给出问题发生的原因。

其中值得参考的有这个大佬的观点,maxLifeTime不仅要像HikariCP官方说的那样小于数据库的 wait_timeout,还要小于包括代理在内的所有介于数据库和业务应用之间其他代理的超时时间。(出处:HikariCP不断打印WARN日志Failed to validate connection com.mysql.jdbc.JDBC4Connection@xxxxx (…) Possibly consider using a shorter maxLifetime value.)

可是人家是因为有类似 Nginx 的网站代理,所以那个时间才出现了差错,而我是直接在 IDEA 连接远程数据库,按理说没啥问题才对。

然后我想了想,既然不是 MySQL 这里断开连接的,那会不会是网络传输过程中哪里的连接中断了,比如网络问题导致的连接中断,于是我顺着这个思路上网搜了搜,发现了这么一篇文章:阿里云安全组之静默丢包。

我看了后犹如醍醐灌顶,原因知道了,可能是云服务器那里的一些连接策略导致连接断开,所以才会导致虽然程序和数据库那里的连接都没有过期,但是程序就是连接不上这些连接(因为他们已经在网络传输的过程中被中断了)。

解决方法

解决方法很简单,设置更短的 maxLifeTime,如下:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://xxx.xxx.xx.xxx:3306/myblog?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=trueusername: xxxxpassword: xxxxhikari:connection-timeout: 60000   # 数据库连接超时时间,默认30秒,即30000validation-timeout: 3000    # 指定验证连接有效性的超时时间(默认是5秒,最小不能小于250毫秒)idle-timeout: 60000         # 空闲连接超时时间,一个连接idle状态的最大时长(毫秒),超时则被释放(retired),默认是10分钟,只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放login-timeout: 5            # 指定连接数据库的超时时间,单位:秒max-lifetime: 70000         # 指定连接池中连接的最大生存时间,单位:毫秒.默认是1800000,即30分钟maximum-pool-size: 30       # 指定连接池最大的连接数,包括使用中的和空闲的连接,默认值10minimum-idle: 10            # 指定连接维护的最小空闲连接数,当使用HikariCP时指定read-only: false            # 当使用Hikari connection pool时,是否标记数据源只读redis:database: 0host: xxx.xxx.xx.xxxport: 6379password: xxxxxxxxjedis:pool:max-idle: 8min-idle: 0timeout: 300mybatis:mapper-locations: classpath:mapping/*Dao.xmltype-aliases-package: com.gcl.demo1.entitylogging:level:root: infocom.gcl: debugfile:name: log/blog-dev.logserver:port: 8888servlet:session:timeout: 864000

后续

其实如果在服务器部署项目的话是不会遇到这个问题的,恰好我是在自己电脑远程连接服务器的数据库才遇到,也算一种缘分吧。

借鉴文章:

HikariCP不断打印WARN日志Failed to validate connection com.mysql.jdbc.JDBC4Connection@xxxxx (…) Possibly consider using a shorter maxLifetime value.

阿里云安全组之静默丢包

PS:也可以到我的个人博客查看更多内容
个人博客地址:小关同学的博客

相关文章:

谈谈对web标准的理解

Web标准不是某一个标准&#xff0c;而是由一系列标准组合而成。网页主要由三部分组成&#xff1a;结构、表现和行为。对应的标准也分三方面&#xff1a;结构化标准语言主要包括XHTML和HTML以及XML&#xff0c;表现标准语言主要包括CSS&#xff0c;行为标准主要包括对象模型&…

2022-2028年中国二次供水设备行业研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国二次供水设备行业市场行业相关概述、中国二次供水设备行业市场行业运行环境、分析了中国二…

linux磁盘配额管理

linux-用户磁盘配额磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制&#xff0c;每一用户只能使用最大配额范围内的磁盘空间磁盘配额可以限制指定账户能够使用的磁盘空间,这样可以避免因某个用户的过度使用磁盘空间造成其他用户无法正常工作甚至影响系统运行。在服…

终端打不开(右键和快捷键)?因为phthon?

参考连接&#xff1a;https://www.cnblogs.com/dolphi/p/3622570.html 在总的环境变量中删除掉LC_ALL这一项&#xff0c;重新启动后即可恢复以及打开终端&#xff1b; 具体怎么操作&#xff1a;是师兄帮弄的&#xff0c;没看清楚怎么操作&#xff01;

Unity从头到尾无代码游戏制作学习教程

制作没有代码的游戏 Unity中的主视觉脚本&#xff01; 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:26.2 GB 含课程文件|时长:21小时 11分…

经常使用ARM汇编指令

一面学习&#xff0c;一面总结&#xff0c;一面记录。 以下是整理在网上找到的一些资料&#xff0c;简单整理记录一下&#xff0c;方便以后查阅。 ARM处理器的指令集能够分为跳转指令、数据处理指令、程序状态寄存器&#xff08;PSR&#xff09;处理指令、载入/存储指令、协处理…

解决 Could not autowire. No beans of ‘UserDao‘ type found 问题

前言&#xff1a;今天在完善项目的时候发现使用Autowired注入的Dao层依赖出现报错&#xff0c;但是不影响项目的运行&#xff0c;在此记录一下 问题 这个错误不影响项目运行&#xff0c;但是它看着很烦… 分析 Dao层代码&#xff1a; Mapper public interface UserDao {User…

2022-2028年中国二次供水产业发展动态及投资战略规划报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国二次供水行业市场行业相关概述、中国二次供水行业市场行业运行环境、分析了中国二次供水行…

Tomcat安全

一、版本安全 升级当前的tomcat版本为最新稳定版本。故名思议&#xff0c;最新稳定版本就要兼顾最新和稳定这两个概念。一个稳定的版本&#xff0c;是需要时间沉淀的&#xff0c;而最新又是相对于稳定版而言的最新。因此我们一般会选择当前大版本中&#xff0c;最新版本往前推几…

Linux系统下给Qt应用程序配置图标(其余的应用程序也是可以实现添加图标的)

添加链接描述1.创建启动脚本 打开终端输入&#xff1a; touch run.sh在/home目录下找到run.sh文件&#xff0c;双击打开编辑&#xff1b; #&#xff01;/bin/bash cd /execute/home/xxx/ &#xff03;/home/xxx/是Release编译以后生成的应用程序的路径 ./Json2.创建d…

Unity完全学习教程-从初学者到C#中的RPG游戏开发

打造3款游戏&学习Unity实用方式&#xff01;从基础开始&#xff0c;以一个RPG游戏结束。使用Unity 2020和C# 你会学到: 通过创建酷游戏的实用方法 游戏开发的基础和核心概念 创建一个拥有大量功能的角色扮演游戏 代码背后的数学解释。 要求 最基本的C#或其他面向对象语言…

2345电脑管家_极限挑战:同时安装4大国产杀毒软件,我的电脑是最安全的?

还没到国庆假期&#xff0c;老毛桃就提前给自己放了假&#xff0c;闲着就作妖&#xff0c;这不&#xff1f;现在就忙着卸载。人固有一秃&#xff0c;或秃于科研&#xff0c;或秃于卸载&#xff01;说到作妖&#xff0c;是怎么一回事呢&#xff1f;此前不少网友私信让老毛桃挑战…

Sublime Text 3 及Package Control 安装(附上一个3103可用的Key)

一、Sublime Text 3 下载。 官方下载地址&#xff1a;http://www.sublimetext.com/ 二、Sublime Text 3 安装。 打开安装包&#xff0c;进行傻瓜式安装。 三、注册。 点击Help&#xff0c;选择Enter License&#xff0c;出现如下输入框。 输入注册码。 —– BEGIN LICENSE —–…

2022-2028年中国儿童医疗行业深度调研及投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国儿童医疗行业市场行业相关概述、中国儿童医疗行业市场行业运行环境、分析了中国儿童医疗行…

使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)

简述&#xff1a; 结合Spring和Hibernate进行开发 使用Autowired实现依赖注入&#xff0c; 实现一个学生注册的功能&#xff0c;做一个技术原型 从DAO(Repository) -> Service -> Controller 目录结构&#xff1a; 使用Maven做本地包管理&#xff0c; pom.xml [java]view…

Ubuntu安装QT后无法输入中文怎么办?

文件目录打开&#xff1a; 文件位置/Qt5.12.6/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts 查看是否存在libfcitxplatforminputcontextplugin.so库文件&#xff08;第一次装肯定没有&#xff09;放进去以后重新启动QT即可输入中文该库下载位置&#xff1a; ununtu…

Unity空间射击游戏开发教程

描述 在本课程中&#xff0c;您将学习如何在unity中制作一款太空射击游戏。本课程使用全新的特性和编码实践&#xff0c;并且兼容所有较新版本的unity。 了解如何使用世界领先的免费游戏开发工具Unity创建太空射击游戏。有了我们的在线教程&#xff0c;你会惊讶于创建这样一个…

43.放苹果(递归练习)

放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;&#xff08;用K表示&#xff09;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1 是同…

怎么彻底删除电脑上的软件_你的电脑有救了:1 个神器几个进阶方法彻底删除流氓软件!...

如何彻底删除流氓软件&#xff1f;https://www.zhihu.com/video/1064189630747844608流氓软件不仅会拖慢电脑的运行速度&#xff0c;还有各种烦人的广告和弹窗。哪怕你通过常规方式把它卸载掉了&#xff0c;它依然会卷土重来。因为一般的卸载可能会有文件残留&#xff0c;如何彻…

2022-2028年中国儿童保健品行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国儿童保健品行业市场行业相关概述、中国儿童保健品行业市场行业运行环境、分析了中国儿童保…

构造 Codeforces Round #302 (Div. 2) B Sea and Islands

题目传送门 1 /*2 题意&#xff1a;在n^n的海洋里是否有k块陆地3 构造算法&#xff1a;按奇偶性来判断&#xff0c;k小于等于所有点数的一半&#xff0c;交叉输出L/S4 输出完k个L后&#xff0c;之后全部输出S:)5 5 10 的例子可以是这样的&#xff…

QGC开发(一)---编译构建源码

编译构建源码编译信息下载QGC源码编译与构建编译信息 系 统&#xff1a;Ubuntu 16.04 QT 版 本&#xff1a;QT5.12.6 QGC版本&#xff1a;Stable_3.5.6下载QGC源码 下载连接&#xff1a; git clone https://github.com.cnpmjs.org/mavlink/qgroundcontrol.git -b St…

Unity 3D游戏开发学习教程

用C#用Unity3D制作游戏 你会学到: 您将学习3D游戏开发基础知识&#xff0c;以使用Unity3D引擎推进事物。 到本课程结束时&#xff0c;他们将可以轻松制作任何类型的游戏&#xff0c;无论是3D还是2D MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xf…

iphone照片永久删除怎么恢复_怎么恢复删除的照片?专业数据恢复软件轻松搞定...

怎么恢复删除的照片&#xff1f;照片相信对大家来说也都并不陌生&#xff0c;不管是旅游还是聚会&#xff0c;很多人往往也都会随手一拍&#xff0c;并将这些照片作为留恋。所以现在的生活中&#xff0c;用于拍照的设备也都越来越多&#xff0c;同时很多人对于所拍照片的清晰度…

知识点回顾-简单的TableView单组数据展示/多组数据展示

1 拖入TableView到UIView中,连线DataSource2 3 1.实现数据源方法4 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section5 {6 return ;7 }8 9 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSI…

2022-2028年中国多肽药物市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国多肽药物行业市场行业相关概述、中国多肽药物行业市场行业运行环境、分析了中国多肽药物行…

第一次写,测试下

2015年5月11日转载于:https://blog.51cto.com/tdfly/1650342

【转】ubuntu下实用的三款录屏软件

转发链接&#xff1a;https://www.cnblogs.com/cherishry/p/5710612.html 适用于日常办公&#xff01;

学习如何在AutoCad土木工程中绘制建筑设计图

学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD命令使用 如何在2D Autocad中构建家庭或房屋地图(完整教程视频包括家庭地图、窗户、门、室内家具或物品、…

图像在计算机中通过什么方式表示_万物皆可“计算机视觉”

本文为 AI 研习社编译的技术博客&#xff0c;原标题 &#xff1a;How to do everything in Computer Vision作者 | George Seif翻译 | chesc、Disillusion、Ophria校对 | 邓普斯•杰弗 审核 | Lam-W 整理 | 菠萝妹原文链接&#xff1a;https://towardsdatascience.com/how-to-d…