PageHelper自动加入Limit ?

举报
赵KK日常技术记录 发表于 2023/06/30 16:17:34 2023/06/30
1.2k+ 0 0
【摘要】 怎么说呢,有一种年度总结之前赶进度的感jio,盛产似那啥了突然就,昨天先是改了需求,再报了2个异常,又紧接着报了个故障,没把我累死,对了,这是我入职之后第一次被报故障,当然了,最后我没让他成为故障,对了,故障解决后,把我从故障群踢了(因为解决了就解散群),从报障到确认为非故障15分钟。好了进入正题,处理下bug。异常描述org.springframework.jdbc.BadSqlGramm...

怎么说呢,有一种年度总结之前赶进度的感jio,盛产似那啥了突然就,昨天先是改了需求,再报了2个异常,又紧接着报了个故障,没把我累死,对了,这是我入职之后第一次被报故障,当然了,最后我没让他成为故障,对了,故障解决后,把我从故障群踢了(因为解决了就解散群),从报障到确认为非故障15分钟。好了进入正题,处理下bug。

异常描述

org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘LIMIT 50’ at line 24

The error may exist in URL [jar:file:/home/web/project/app.jar!/BOOT-INF/lib/3.1.1-SNAPSHOT.jar!/mapper/xxxMapper.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: select xx from xxx t where xx and xxx limit 1 LIMIT ?

Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘LIMIT 50’ at line 24

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘LIMIT 50’ at line 24
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:234) ~[spring-jdbc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) ~[mybatis-spring-1.3.2.jar!/:1.3.2]
at org.mybatis.spring.SqlSessionTemplate S q l S e s s i o n I n t e r c e p t o r . i n v o k e ( S q l S e s s i o n T e m p l a t e . j a v a : 446 )   [ m y b a t i s s p r i n g 1.3.2. j a r ! / : 1.3.2 ] a t c o m . s u n . p r o x y . SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-1.3.2.jar!/:1.3.2] at com.sun.proxy. Proxy203.selectOne(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166) ~[mybatis-spring-1.3.2.jar!/:1.3.2]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:83) ~[mybatis-3.4.6.jar!/:3.4.6]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.6.jar!/:3.4.6]
at com.sun.proxy. P r o x y 230. s e l e c t H e a d e r D e t a i l ( U n k n o w n S o u r c e )   [ n a : n a ] a t x x . x x a t x x . x x a t o r g . s p r i n g f r a m e w o r k . c g l i b . p r o x y . M e t h o d P r o x y . i n v o k e ( M e t h o d P r o x y . j a v a : 218 )   [ s p r i n g c o r e 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y Proxy230.selectHeaderDetail(Unknown Source) ~[na:na] at xx.xx at xx.xx at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.aop.framework.CglibAopProxy CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.CglibAopProxy D y n a m i c A d v i s e d I n t e r c e p t o r . i n t e r c e p t ( C g l i b A o p P r o x y . j a v a : 688 )   [ s p r i n g a o p 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t x x . x x a t x x . x x a t x x . x x a t o r g . s p r i n g f r a m e w o r k . c g l i b . p r o x y . M e t h o d P r o x y . i n v o k e ( M e t h o d P r o x y . j a v a : 218 )   [ s p r i n g c o r e 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . C g l i b A o p P r o x y DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at xx.xx at xx.xx at xx.xx at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.aop.framework.CglibAopProxy CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at xx.xx
at jdk.internal.reflect.GeneratedMethodAccessor986.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
at org.springframework.aop.framework.CglibAopProxy D y n a m i c A d v i s e d I n t e r c e p t o r . i n t e r c e p t ( C g l i b A o p P r o x y . j a v a : 688 )   [ s p r i n g a o p 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t x x . x x a t j d k . i n t e r n a l . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 3223. i n v o k e ( U n k n o w n S o u r c e )   [ n a : n a ] a t j a v a . b a s e / j d k . i n t e r n a l . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 43 )   [ n a : n a ] a t j a v a . b a s e / j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 566 )   [ n a : n a ] a t o r g . s p r i n g f r a m e w o r k . w e b . m e t h o d . s u p p o r t . I n v o c a b l e H a n d l e r M e t h o d . d o I n v o k e ( I n v o c a b l e H a n d l e r M e t h o d . j a v a : 189 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . m e t h o d . s u p p o r t . I n v o c a b l e H a n d l e r M e t h o d . i n v o k e F o r R e q u e s t ( I n v o c a b l e H a n d l e r M e t h o d . j a v a : 138 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . m v c . m e t h o d . a n n o t a t i o n . S e r v l e t I n v o c a b l e H a n d l e r M e t h o d . i n v o k e A n d H a n d l e ( S e r v l e t I n v o c a b l e H a n d l e r M e t h o d . j a v a : 102 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . m v c . m e t h o d . a n n o t a t i o n . R e q u e s t M a p p i n g H a n d l e r A d a p t e r . i n v o k e H a n d l e r M e t h o d ( R e q u e s t M a p p i n g H a n d l e r A d a p t e r . j a v a : 895 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . m v c . m e t h o d . a n n o t a t i o n . R e q u e s t M a p p i n g H a n d l e r A d a p t e r . h a n d l e I n t e r n a l ( R e q u e s t M a p p i n g H a n d l e r A d a p t e r . j a v a : 800 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . m v c . m e t h o d . A b s t r a c t H a n d l e r M e t h o d A d a p t e r . h a n d l e ( A b s t r a c t H a n d l e r M e t h o d A d a p t e r . j a v a : 87 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . D i s p a t c h e r S e r v l e t . d o D i s p a t c h ( D i s p a t c h e r S e r v l e t . j a v a : 1038 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . D i s p a t c h e r S e r v l e t . d o S e r v i c e ( D i s p a t c h e r S e r v l e t . j a v a : 942 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . p r o c e s s R e q u e s t ( F r a m e w o r k S e r v l e t . j a v a : 1005 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . d o G e t ( F r a m e w o r k S e r v l e t . j a v a : 897 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t j a v a x . s e r v l e t . h t t p . H t t p S e r v l e t . s e r v i c e ( H t t p S e r v l e t . j a v a : 645 )   [ j a v a x . s e r v l e t a p i 4.0.1. j a r ! / : 4.0.1 ] a t o r g . s p r i n g f r a m e w o r k . w e b . s e r v l e t . F r a m e w o r k S e r v l e t . s e r v i c e ( F r a m e w o r k S e r v l e t . j a v a : 882 )   [ s p r i n g w e b m v c 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t j a v a x . s e r v l e t . h t t p . H t t p S e r v l e t . s e r v i c e ( H t t p S e r v l e t . j a v a : 750 )   [ j a v a x . s e r v l e t a p i 4.0.1. j a r ! / : 4.0.1 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 231 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . t o m c a t . w e b s o c k e t . s e r v e r . W s F i l t e r . d o F i l t e r ( W s F i l t e r . j a v a : 53 )   [ t o m c a t e m b e d w e b s o c k e t 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t x x . x x a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . s p r i n g f r a m e w o r k . b o o t . a c t u a t e . w e b . t r a c e . s e r v l e t . H t t p T r a c e F i l t e r . d o F i l t e r I n t e r n a l ( H t t p T r a c e F i l t e r . j a v a : 90 )   [ s p r i n g b o o t a c t u a t o r 2.1.2. R E L E A S E . j a r ! / : 2.1.2. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t x x . x x a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t x x . x x a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t x x . x x a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . R e q u e s t C o n t e x t F i l t e r . d o F i l t e r I n t e r n a l ( R e q u e s t C o n t e x t F i l t e r . j a v a : 99 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . F o r m C o n t e n t F i l t e r . d o F i l t e r I n t e r n a l ( F o r m C o n t e n t F i l t e r . j a v a : 92 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . H i d d e n H t t p M e t h o d F i l t e r . d o F i l t e r I n t e r n a l ( H i d d e n H t t p M e t h o d F i l t e r . j a v a : 93 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . s p r i n g f r a m e w o r k . b o o t . a c t u a t e . m e t r i c s . w e b . s e r v l e t . W e b M v c M e t r i c s F i l t e r . f i l t e r A n d R e c o r d M e t r i c s ( W e b M v c M e t r i c s F i l t e r . j a v a : 117 )   [ s p r i n g b o o t a c t u a t o r 2.1.2. R E L E A S E . j a r ! / : 2.1.2. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . b o o t . a c t u a t e . m e t r i c s . w e b . s e r v l e t . W e b M v c M e t r i c s F i l t e r . d o F i l t e r I n t e r n a l ( W e b M v c M e t r i c s F i l t e r . j a v a : 106 )   [ s p r i n g b o o t a c t u a t o r 2.1.2. R E L E A S E . j a r ! / : 2.1.2. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . C h a r a c t e r E n c o d i n g F i l t e r . d o F i l t e r I n t e r n a l ( C h a r a c t e r E n c o d i n g F i l t e r . j a v a : 200 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . w e b . f i l t e r . O n c e P e r R e q u e s t F i l t e r . d o F i l t e r ( O n c e P e r R e q u e s t F i l t e r . j a v a : 107 )   [ s p r i n g w e b 5.1.4. R E L E A S E . j a r ! / : 5.1.4. R E L E A S E ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t x x . x x a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . i n t e r n a l D o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 193 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . A p p l i c a t i o n F i l t e r C h a i n . d o F i l t e r ( A p p l i c a t i o n F i l t e r C h a i n . j a v a : 166 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . S t a n d a r d W r a p p e r V a l v e . i n v o k e ( S t a n d a r d W r a p p e r V a l v e . j a v a : 199 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . S t a n d a r d C o n t e x t V a l v e . i n v o k e ( S t a n d a r d C o n t e x t V a l v e . j a v a : 96 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . a u t h e n t i c a t o r . A u t h e n t i c a t o r B a s e . i n v o k e ( A u t h e n t i c a t o r B a s e . j a v a : 490 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . S t a n d a r d H o s t V a l v e . i n v o k e ( S t a n d a r d H o s t V a l v e . j a v a : 139 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . v a l v e s . E r r o r R e p o r t V a l v e . i n v o k e ( E r r o r R e p o r t V a l v e . j a v a : 92 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o r e . S t a n d a r d E n g i n e V a l v e . i n v o k e ( S t a n d a r d E n g i n e V a l v e . j a v a : 74 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c a t a l i n a . c o n n e c t o r . C o y o t e A d a p t e r . s e r v i c e ( C o y o t e A d a p t e r . j a v a : 343 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c o y o t e . h t t p 11. H t t p 11 P r o c e s s o r . s e r v i c e ( H t t p 11 P r o c e s s o r . j a v a : 408 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c o y o t e . A b s t r a c t P r o c e s s o r L i g h t . p r o c e s s ( A b s t r a c t P r o c e s s o r L i g h t . j a v a : 66 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . c o y o t e . A b s t r a c t P r o t o c o l DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at xx.xx at jdk.internal.reflect.GeneratedMethodAccessor3223.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) ~[javax.servlet-api-4.0.1.jar!/:4.0.1] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[javax.servlet-api-4.0.1.jar!/:4.0.1] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at xx.xx at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) ~[spring-boot-actuator-2.1.2.RELEASE.jar!/:2.1.2.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at xx.xx at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at xx.xx at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at xx.xx at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) ~[spring-boot-actuator-2.1.2.RELEASE.jar!/:2.1.2.RELEASE] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) ~[spring-boot-actuator-2.1.2.RELEASE.jar!/:2.1.2.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at xx.xx at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.coyote.AbstractProtocol ConnectionHandler.process(AbstractProtocol.java:834) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14]
at org.apache.tomcat.util.net.NioEndpoint S o c k e t P r o c e s s o r . d o R u n ( N i o E n d p o i n t . j a v a : 1417 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t o r g . a p a c h e . t o m c a t . u t i l . n e t . S o c k e t P r o c e s s o r B a s e . r u n ( S o c k e t P r o c e s s o r B a s e . j a v a : 49 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r . r u n W o r k e r ( T h r e a d P o o l E x e c u t o r . j a v a : 1128 )   [ n a : n a ] a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r SocketProcessor.doRun(NioEndpoint.java:1417) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread W r a p p i n g R u n n a b l e . r u n ( T a s k T h r e a d . j a v a : 61 )   [ t o m c a t e m b e d c o r e 9.0.14. j a r ! / : 9.0.14 ] a t j a v a . b a s e / j a v a . l a n g . T h r e a d . r u n ( T h r e a d . j a v a : 834 )   [ n a : n a ] C a u s e d b y : j a v a . s q l . S Q L S y n t a x E r r o r E x c e p t i o n : Y o u h a v e a n e r r o r i n y o u r S Q L s y n t a x ; c h e c k t h e m a n u a l t h a t c o r r e s p o n d s t o y o u r M y S Q L s e r v e r v e r s i o n f o r t h e r i g h t s y n t a x t o u s e n e a r L I M I T 5 0 a t l i n e 24 a t c o m . m y s q l . c j . j d b c . e x c e p t i o n s . S Q L E r r o r . c r e a t e S Q L E x c e p t i o n ( S Q L E r r o r . j a v a : 120 )   [ m y s q l c o n n e c t o r j a v a 8.0.13. j a r ! / : 8.0.13 ] a t c o m . m y s q l . c j . j d b c . e x c e p t i o n s . S Q L E r r o r . c r e a t e S Q L E x c e p t i o n ( S Q L E r r o r . j a v a : 97 )   [ m y s q l c o n n e c t o r j a v a 8.0.13. j a r ! / : 8.0.13 ] a t c o m . m y s q l . c j . j d b c . e x c e p t i o n s . S Q L E x c e p t i o n s M a p p i n g . t r a n s l a t e E x c e p t i o n ( S Q L E x c e p t i o n s M a p p i n g . j a v a : 122 )   [ m y s q l c o n n e c t o r j a v a 8.0.13. j a r ! / : 8.0.13 ] a t c o m . m y s q l . c j . j d b c . C l i e n t P r e p a r e d S t a t e m e n t . e x e c u t e I n t e r n a l ( C l i e n t P r e p a r e d S t a t e m e n t . j a v a : 974 )   [ m y s q l c o n n e c t o r j a v a 8.0.13. j a r ! / : 8.0.13 ] a t c o m . m y s q l . c j . j d b c . C l i e n t P r e p a r e d S t a t e m e n t . e x e c u t e ( C l i e n t P r e p a r e d S t a t e m e n t . j a v a : 391 )   [ m y s q l c o n n e c t o r j a v a 8.0.13. j a r ! / : 8.0.13 ] a t c o m . a l i b a b a . d r u i d . f i l t e r . F i l t e r C h a i n I m p l . p r e p a r e d S t a t e m e n t e x e c u t e ( F i l t e r C h a i n I m p l . j a v a : 3409 )   [ d r u i d 1.1.16. j a r ! / : 1.1.16 ] a t c o m . a l i b a b a . d r u i d . f i l t e r . F i l t e r E v e n t A d a p t e r . p r e p a r e d S t a t e m e n t e x e c u t e ( F i l t e r E v e n t A d a p t e r . j a v a : 440 )   [ d r u i d 1.1.16. j a r ! / : 1.1.16 ] a t c o m . a l i b a b a . d r u i d . f i l t e r . F i l t e r C h a i n I m p l . p r e p a r e d S t a t e m e n t e x e c u t e ( F i l t e r C h a i n I m p l . j a v a : 3407 )   [ d r u i d 1.1.16. j a r ! / : 1.1.16 ] a t c o m . a l i b a b a . d r u i d . p r o x y . j d b c . P r e p a r e d S t a t e m e n t P r o x y I m p l . e x e c u t e ( P r e p a r e d S t a t e m e n t P r o x y I m p l . j a v a : 167 )   [ d r u i d 1.1.16. j a r ! / : 1.1.16 ] a t c o m . a l i b a b a . d r u i d . p o o l . D r u i d P o o l e d P r e p a r e d S t a t e m e n t . e x e c u t e ( D r u i d P o o l e d P r e p a r e d S t a t e m e n t . j a v a : 497 )   [ d r u i d 1.1.16. j a r ! / : 1.1.16 ] a t o r g . a p a c h e . s h a r d i n g s p h e r e . s h a r d i n g j d b c . j d b c . c o r e . s t a t e m e n t . M a s t e r S l a v e P r e p a r e d S t a t e m e n t . e x e c u t e ( M a s t e r S l a v e P r e p a r e d S t a t e m e n t . j a v a : 118 )   [ s h a r d i n g j d b c c o r e 4.0.0 R C 1. j a r ! / : 4.0.0 R C 1 ] a t o r g . a p a c h e . i b a t i s . e x e c u t o r . s t a t e m e n t . P r e p a r e d S t a t e m e n t H a n d l e r . q u e r y ( P r e p a r e d S t a t e m e n t H a n d l e r . j a v a : 63 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t o r g . a p a c h e . i b a t i s . e x e c u t o r . s t a t e m e n t . R o u t i n g S t a t e m e n t H a n d l e r . q u e r y ( R o u t i n g S t a t e m e n t H a n d l e r . j a v a : 79 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t j d k . i n t e r n a l . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 380. i n v o k e ( U n k n o w n S o u r c e )   [ n a : n a ] a t j a v a . b a s e / j d k . i n t e r n a l . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 43 )   [ n a : n a ] a t j a v a . b a s e / j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 566 )   [ n a : n a ] a t o r g . a p a c h e . i b a t i s . p l u g i n . P l u g i n . i n v o k e ( P l u g i n . j a v a : 63 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t c o m . s u n . p r o x y . WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.14.jar!/:9.0.14] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 50' at line 24 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.13.jar!/:8.0.13] at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.13.jar!/:8.0.13] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.13.jar!/:8.0.13] at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:974) ~[mysql-connector-java-8.0.13.jar!/:8.0.13] at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:391) ~[mysql-connector-java-8.0.13.jar!/:8.0.13] at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3409) ~[druid-1.1.16.jar!/:1.1.16] at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440) ~[druid-1.1.16.jar!/:1.1.16] at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3407) ~[druid-1.1.16.jar!/:1.1.16] at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167) ~[druid-1.1.16.jar!/:1.1.16] at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497) ~[druid-1.1.16.jar!/:1.1.16] at org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.MasterSlavePreparedStatement.execute(MasterSlavePreparedStatement.java:118) ~[sharding-jdbc-core-4.0.0-RC1.jar!/:4.0.0-RC1] at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63) ~[mybatis-3.4.6.jar!/:3.4.6] at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.4.6.jar!/:3.4.6] at jdk.internal.reflect.GeneratedMethodAccessor380.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) ~[mybatis-3.4.6.jar!/:3.4.6] at com.sun.proxy. Proxy358.query(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.4.6.jar!/:3.4.6]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326) ~[mybatis-3.4.6.jar!/:3.4.6]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.4.6.jar!/:3.4.6]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.4.6.jar!/:3.4.6]
at jdk.internal.reflect.GeneratedMethodAccessor268.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.4.6.jar!/:3.4.6]
at xx.xx
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.4.6.jar!/:3.4.6]
at com.sun.proxy. P r o x y 357. q u e r y ( U n k n o w n S o u r c e )   [ n a : n a ] a t j d k . i n t e r n a l . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 268. i n v o k e ( U n k n o w n S o u r c e )   [ n a : n a ] a t j a v a . b a s e / j d k . i n t e r n a l . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 43 )   [ n a : n a ] a t j a v a . b a s e / j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 566 )   [ n a : n a ] a t o r g . a p a c h e . i b a t i s . p l u g i n . I n v o c a t i o n . p r o c e e d ( I n v o c a t i o n . j a v a : 49 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t x x . x x a t x x . x x a t x x . x x a t o r g . a p a c h e . i b a t i s . p l u g i n . P l u g i n . i n v o k e ( P l u g i n . j a v a : 61 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t c o m . s u n . p r o x y . Proxy357.query(Unknown Source) ~[na:na] at jdk.internal.reflect.GeneratedMethodAccessor268.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.4.6.jar!/:3.4.6] at xx.xx at xx.xx at xx.xx at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.4.6.jar!/:3.4.6] at com.sun.proxy. Proxy357.query(Unknown Source) ~[na:na]
at com.github.pagehelper.util.ExecutorUtil.pageQuery(ExecutorUtil.java:177) ~[pagehelper-5.1.8.jar!/:na]
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:104) ~[pagehelper-5.1.8.jar!/:na]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.4.6.jar!/:3.4.6]
at com.sun.proxy. P r o x y 357. q u e r y ( U n k n o w n S o u r c e )   [ n a : n a ] a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t L i s t ( D e f a u l t S q l S e s s i o n . j a v a : 148 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t L i s t ( D e f a u l t S q l S e s s i o n . j a v a : 141 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t O n e ( D e f a u l t S q l S e s s i o n . j a v a : 77 )   [ m y b a t i s 3.4.6. j a r ! / : 3.4.6 ] a t j d k . i n t e r n a l . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 634. i n v o k e ( U n k n o w n S o u r c e )   [ n a : n a ] a t j a v a . b a s e / j d k . i n t e r n a l . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 43 )   [ n a : n a ] a t j a v a . b a s e / j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 566 )   [ n a : n a ] a t o r g . m y b a t i s . s p r i n g . S q l S e s s i o n T e m p l a t e Proxy357.query(Unknown Source) ~[na:na] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.6.jar!/:3.4.6] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.6.jar!/:3.4.6] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77) ~[mybatis-3.4.6.jar!/:3.4.6] at jdk.internal.reflect.GeneratedMethodAccessor634.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.mybatis.spring.SqlSessionTemplate SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.2.jar!/:1.3.2]
… 111 common frames omitted
报错还是很明显的,SQL的语法不正确,但问题就在这,我觉得正常的语句是不会犯这种低级错误的,就算犯了,一定会第一时间发现,这种报错在今年出现了5次左右,那么什么时候会自动加入limit语句?使用分页插件的时候,我用了吗?用了,在此方法中用了吗?没用,我仔仔细细的检查了,绝对没用到,也不可能用到。

首先这个bug不是必现,是偶现,是你可以去复现都不可能复现出来的,报错位置也不是在一个语句之内,但肯定都是语法错误。

排查过程

排查是否存在MapperTemplate的子类

全局搜索,因为后期已经去掉这种方式去查询了,这种Mybatis逆向生成方法使用了$存在SQL注入的风险就没有采用了,在其setResultType方法中也有可能拼接resultmap

2.是否存在SQL拦截器?

@Component
public class TestSqlConfig {

public TestSqlConfig(@Autowired List<SqlSessionFactory> list){
    if(CollectionUtils.isNotEmpty(list)){
        list.forEach(r->{
            List<Interceptor> interceptors = r.getConfiguration().getInterceptors();
            System.out.println("find interceptors"+JSONObject.toJSONString(interceptors));
        });
    }
}

}
find interceptors[{},{},{}]
不存在,你查这玩意干啥?因为本身的SqlSessionFactory存在AutoConfig,如果存在拦截器,可能会对Sql进行拼接limit语句。

public interface SqlSessionFactory {

SqlSession openSession();

SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);

SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);

Configuration getConfiguration();

}
3.PageHelper?

当我再次点开PageHelper官方文档时,我把pageHelper的每个调用方式全都查了一遍,确定以及肯定,确实没用到。

//第一种,RowBounds方式的调用
List<Country> list = sqlSession.selectList(“x.y.selectIf”, null, new RowBounds(0, 10));

//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);

//第三种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.offsetPage(1, 10);
List<Country> list = countryMapper.selectIf(1);

//第四种,参数方法调用
//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
public interface CountryMapper {
List<Country> selectByPageNumSize(
@Param(“user”) User user,
@Param(“pageNum”) int pageNum,
@Param(“pageSize”) int pageSize);
}
//配置supportMethodsArguments=true
//在代码中直接调用:
List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);

//第五种,参数对象
//如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页
//有如下 User 对象
public class User {
//其他fields
//下面两个参数名和 params 配置的名字一致
private Integer pageNum;
private Integer pageSize;
}
//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
public interface CountryMapper {
List<Country> selectByPageNumSize(User user);
}
//当 user 中的 pageNum!= null && pageSize!= null 时,会自动分页
List<Country> list = countryMapper.selectByPageNumSize(user);

//第六种,ISelect 接口方式
//jdk6,7用法,创建接口
Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectGroupBy();
}
});
//jdk8 lambda用法
Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(()-> countryMapper.selectGroupBy());

//也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectGroupBy();
}
});
//对应的lambda用法
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> countryMapper.selectGroupBy());

//count查询,返回一个查询语句的count数
long total = PageHelper.count(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectLike(country);
}
});
//lambda
total = PageHelper.count(()->countryMapper.selectLike(country));
那你怎么怀疑PageHelper?官网如图

图片

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。我保证了吗?我没保证,是我写的吗?已经不重要了(确实不是我写的)。

是在同一线程中出现的吗?不是

图片

PageHelper.startPage(request.current(), request.size());
PageInfo pageInfo = new PageInfo<>();
List<String> list = request.getChildCustomerCodeList();
List<CustomerReceivingTimeConfigurationDto> responseList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(list)){
List<String> resultList = customerReceivingTimeConfigurationMapper.selectCustomerListByReceivingTime(request);
PageHelper怎么会用到ThreadLocal呢?

public abstract class PageMethod
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
protected static boolean DEFAULT_COUNT = true;
当使用非安全的分页时,是不能保证调用start方法后在finally中一定执行了clear方法的,此时的线程中start的page 不能保证线程在当前执行退出时清理完page变量!!!

何时调用?

当调用clear方法时会在内部调用LOCAL_PAGE(即TL)的remove方法

public void remove() {
ThreadLocalMap m = getMap(Thread.currentThread());
if (m != null) {
m.remove(this);
}
}
解决方案

1.遵从编码规范,保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法

2.手动调用page.clear方法。

3.更改不规范代码如下

List<Country> list;
if(param1 != null){
PageHelper.startPage(1, 10);
list = countryMapper.selectIf(param1);
} else {
list = new ArrayList<Country>();
}
总结

虽然整个过程的报错用户是无法感知的,但排查问题的过程值得深究,并不是所有的问题都在表面,当去深究此问题或许会发现不一样的收获,这在此过程中或许是最重要的,不要放过每一个犯错的机会。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。