Получение исключения «не судоходное место для результатов» из запроса JDBCTemplate по сравнению с базой данных MySQL в пMySql

Форум по Mysql
Ответить
Anonymous
 Получение исключения «не судоходное место для результатов» из запроса JDBCTemplate по сравнению с базой данных MySQL в п

Сообщение Anonymous »

У нас есть приложение Spring Boot, написанное в Kotlin, которое работает в контейнере на платформе приложений Digital Ocean. < /p>
Версии: < /p>
  • mysql 8.0.30 < /li>
    Kotlin 2.0.20 < /li>
    Spring Boot 3.4.2 < /li>
    Hikaricp 3.4.5
  • mysql connector/j 9.1.0
at, казалось бы, случайный , времена, мы получаем ошибки из наших выбранных запросов, которые указывают, что набор результатов был «не судоходным набором результатов». < /p>
2025-02-18T14:37:44.866 [join-backend-v3-prod-85f5d9c488-scsgt] [http-nio-0.0.0.0-8080-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [select
u.uid,
first_name,
last_name,
email,
ss.end_datetime is not null and ss.end_datetime > current_timestamp() as subscription_active,
locale,
time_zone,
is_admin,
exists(select uid from blacklisted_users where blacklisted_users.uid = u.uid) as is_blacklisted
from users u
left join subscription_summaries ss on u.uid = ss.uid
where u.uid = ?
and auth_token = ?]; N o t a n a v i g a b l e R e s u l t S e t . < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . s u p p o r t . S Q L S t a t e S Q L E x c e p t i o n T r a n s l a t o r . d o T r a n s l a t e ( S Q L S t a t e S Q L E x c e p t i o n T r a n s l a t o r . j a v a : 1 2 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . s u p p o r t . A b s t r a c t F a l l b a c k S Q L E x c e p t i o n T r a n s l a t o r . t r a n s l a t e ( A b s t r a c t F a l l b a c k S Q L E x c e p t i o n T r a n s l a t o r . j a v a : 1 0 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . s u p p o r t . A b s t r a c t F a l l b a c k S Q L E x c e p t i o n T r a n s l a t o r . t r a n s l a t e ( A b s t r a c t F a l l b a c k S Q L E x c e p t i o n T r a n s l a t o r . j a v a : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . c o r e . J d b c T e m p l a t e . t r a n s l a t e E x c e p t i o n ( J d b c T e m p l a t e . j a v a : 1 5 5 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . c o r e . J d b c T e m p l a t e . e x e c u t e ( J d b c T e m p l a t e . j a v a : 6 7 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . c o r e . J d b c T e m p l a t e . q u e r y ( J d b c T e m p l a t e . j a v a : 7 2 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . c o r e . J d b c T e m p l a t e . q u e r y ( J d b c T e m p l a t e . j a v a : 7 4 8 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . c o r e . n a m e d p a r a m . N a m e d P a r a m e t e r J d b c T e m p l a t e . q u e r y ( N a m e d P a r a m e t e r J d b c T e m p l a t e . j a v a : 1 7 8 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . j d b c . c o r e . n a m e d p a r a m . N a m e d P a r a m e t e r J d b c T e m p l a t e . q u e r y ( N a m e d P a r a m e t e r J d b c T e m p l a t e . j a v a : 1 8 6 ) < b r / > a t c c . j o i n . b a c k e n d . r e p o s i t o r i e s . S p r i n g U s e r R e p o s i t o r y . f e t c h P r i n c i p a l B y I d A n d A u t h T o k e n ( S p r i n g U s e r R e p o s i t o r y . k t : 3 8 ) < b r / > a t c c . j o i n . b a c k e n d . s p r i n g . J o i n A u t h e n t i c a t i o n P r o v i d e r . r e t r i e v e U s e r ( J o i n A u t h e n t i c a t i o n P r o v i d e r . k t : 2 8 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . a u t h e n t i c a t i o n . d a o . A b s t r a c t U s e r D e t a i l s A u t h e n t i c a t i o n P r o v i d e r . a u t h e n t i c a t e ( A b s t r a c t U s e r D e t a i l s A u t h e n t i c a t i o n P r o v i d e r . j a v a : 1 3 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . a u t h e n t i c a t i o n . P r o v i d e r M a n a g e r . a u t h e n t i c a t e ( P r o v i d e r M a n a g e r . j a v a : 1 8 2 ) < b r / > a t c c . j o i n . b a c k e n d . s p r i n g . J o i n A u t h e n t i c a t i o n T o k e n F i l t e r . d o F i l t e r I n t e r n a l ( J o i n A u t h e n t i c a t i o n T o k e n F i l t e r . k t : 5 6 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t c c . j o i n . b a c k e n d . s p r i n g . J o i n I n t e r n a l J w t F i l t e r . d o F i l t e r I n t e r n a l ( J o i n I n t e r n a l J w t F i l t e r . k t : 5 9 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t c c . j o i n . b a c k e n d . s p r i n g . A c t u a t o r A p i K e y F i l t e r . d o F i l t e r I n t e r n a l ( A c t u a t o r A p i K e y F i l t e r . k t : 4 1 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > 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 o r s F i l t e r . d o F i l t e r I n t e r n a l ( C o r s F i l t e r . j a v a : 9 1 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . h e a d e r . H e a d e r W r i t e r F i l t e r . d o H e a d e r s A f t e r ( H e a d e r W r i t e r F i l t e r . j a v a : 9 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . h e a d e r . H e a d e r W r i t e r F i l t e r . d o F i l t e r I n t e r n a l ( H e a d e r W r i t e r F i l t e r . j a v a : 7 5 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . c o n t e x t . S e c u r i t y C o n t e x t H o l d e r F i l t e r . d o F i l t e r ( S e c u r i t y C o n t e x t H o l d e r F i l t e r . j a v a : 8 2 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . c o n t e x t . S e c u r i t y C o n t e x t H o l d e r F i l t e r . d o F i l t e r ( S e c u r i t y C o n t e x t H o l d e r F i l t e r . j a v a : 6 9 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . c o n t e x t . r e q u e s t . a s y n c . W e b A s y n c M a n a g e r I n t e g r a t i o n 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 A s y n c M a n a g e r I n t e g r a t i o n F i l t e r . j a v a : 6 2 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . s e s s i o n . D i s a b l e E n c o d e U r l F i l t e r . d o F i l t e r I n t e r n a l ( D i s a b l e E n c o d e U r l F i l t e r . j a v a : 4 2 ) < b r / > 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 : 1 1 6 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . w r a p F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 4 0 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ A r o u n d F i l t e r O b s e r v a t i o n $ S i m p l e A r o u n d F i l t e r O b s e r v a t i o n . l a m b d a $ w r a p $ 0 ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 3 2 3 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ O b s e r v a t i o n F i l t e r . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 2 2 4 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r $ V i r t u a l F i l t e r C h a i n . d o F i l t e r ( O b s e r v a t i o n F i l t e r C h a i n D e c o r a t o r . j a v a : 1 3 7 ) < b r / > a t o r g . s p r i n g f r a m e w o r k . s e c u r i t y . w e b . F i l t e r ChainProxy.doFilterInternal(FilterChainProxy.java:233)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:243)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:238)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.zalando.logbook.servlet.LogbookFilter.doFilter(LogbookFilter.java:76)
at org.zalando.logbook.servlet.SecureLogbookFilter.doFilter(SecureLogbookFilter.java:32)
at org.zalando.logbook.servlet.HttpFilter.doFilter(HttpFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:731)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Not a navigable ResultSet.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:81)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:55)
at com.mysql.cj.jdbc.result.ResultSetImpl.next(ResultSetImpl.java:1807)
at com.zaxxer.hikari.pool.HikariProxyResultSet.next(HikariProxyResultSet.java)
at cc.join.backend.repositories.SpringUserRepository.joinPrincipalResultSetExtractor$lambda$3(SpringUserRepository.kt:64)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:733)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658)
... 99 common frames omitted
< /code>
Код, который выполняет запрос: < /p>
import java.time.DateTimeException
import java.time.ZoneId
import java.time.zone.ZoneRulesException
import java.util.Locale
import javax.sql.DataSource

@Repository
class SpringUserRepository(dataSource: DataSource) {
private val jdbcTemplate = NamedParameterJdbcTemplate(dataSource)

/** Fetch a user with the given userId and token exists in the database. If no user with
* the provided [userId] and [token] is found, returns null. */
fun fetchPrincipalByIdAndAuthToken(userId: Long, token: String): JoinPrincipal? {
val sql = """
select
u.uid,
first_name,
last_name,
email,
ss.end_datetime is not null and ss.end_datetime > current_timestamp() as subscription_active,
locale,
time_zone,
is_admin,
exists(select uid from blacklisted_users where blacklisted_users.uid = u.uid) as is_blacklisted
from users u
left join subscription_summaries ss on u.uid = ss.uid
where u.uid = :uid
and auth_token = :authToken
""".trimIndent()
return jdbcTemplate.query(sql, mapOf("uid" to userId, "authToken" to token), joinPrincipalResultSetExtractor)
}

private val joinPrincipalResultSetExtractor: ResultSetExtractor = ResultSetExtractor { resultSet ->
if (resultSet.next()) {
val isBlacklisted = resultSet.getBoolean("is_blacklisted")

val timeZone: ZoneId = resultSet.getString("time_zone")
?.takeIf { it.isNotBlank() }
?.let {
try {
ZoneId.of(it)
} catch (zoneRulesException: ZoneRulesException) {
null
} catch (dateTimeException: DateTimeException) {
null
}
}
?: StaticSettings.DEFAULT_ZONE_ID

JoinPrincipal(
id = resultSet.getLong("uid"),
firstName = resultSet.getString("first_name"),
locale = Locale.of(resultSet.getString("locale").ifEmpty { "en" }),
timeZone = timeZone,
isSubscriptionActive = !isBlacklisted && resultSet.getBoolean("subscription_active"),
isAdmin = resultSet.getBoolean("is_admin"),
isBlacklisted = isBlacklisted,
)
} else {
null
}
}
}
< /code>
Этот запрос может привести к возвращению нулевых рядов, но, поскольку это выбранное запрос, resultset.next () < /code> все еще должен работать, возвращая false.
мы видим То же самое с другими запросами, которые потенциально возвращают 0 строк.
У нас есть несколько тестов для этого (работа с базой данных MySQL в TestContainer), которые также проверяют на наличие NULL < /code> case < /p>
@Test
internal fun `test fetch by auth token for unknown user`() {
val principal = springUserRepository.fetchPrincipalByIdAndAuthToken(
userId = 90210,
token = "auth",
)
assertThat(principal).isNull()
}
< /code>
Конфигурация данных: < /p>
spring.datasource:
# Our database contains zero dates and datetimes unfortunately, so we have the JDBC driver convert these to NULLs.
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:join}?zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true&serverTimezone=UTC&auto
username: ${DB_USER}
password: ${DB_PASSWORD}
hikari:
data-source-properties:
# The MySQL JDBC driver does not set a socket timeout by default. When the connection to the database gets
# severed without a normal TCP shutdown, this can result in database connections and not being available
# for the application.
# See https://github.com/brettwooldridge/Hika ... id-Recover for more information.
socketTimeout: 30000

# See https://github.com/brettwooldridge/HikariCP for documentation about the following properties:

# Maximum amount of time that a connection will be tested for aliveness. This value must be less than the
# connection-timeout.
validation-timeout: 4_000
# when creating a new database connection, fail after 5 seconds when no connection can be established. If it
# takes longer than this, chances are that high that it will be impossible to get a connection.
connection-timeout: 5_000
# Regularly check database connections for aliveness. This prevents database code from being handed a connection
# that has been severed.
keepalive-time: 60_000
# maximum nr of connections. We're not setting 'minimum-idle', so this will be a fixed-size pool.
maximum-pool-size: 25
# Whenever a connection is not returned to the pool within 10 seconds, mark it as having been leaked. = 10_000
leak-detection-threshold: 10_000
< /code>
Странная вещь в том, что большую часть времени все работает отлично. Это кажется довольно случайным, и что не помогает, так это то, что мы не можем найти никаких подобных проблем на Google или на этом сайте. Чтобы вызвать ошибку, выполнив тест нагрузку в среде разработки. К сожалению, это не вызвало ошибку. Они указывают на то, что не видели никаких баз данных или сетевых ошибок во времена, когда возникла проблема.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -against-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»