Quarkus应用周期性出现token recognition error at: '^@'问题求助
问题:Quarkus微服务周期性出现
token recognition error at: '^@'异常 运行基于Quarkus、Vert.x/Mutiny、Panache和Hibernate的微服务,每隔约一个月,部分操作会抛出token recognition error at: '^@'错误。怀疑应用栈某层的查询缓存损坏,但不知从何入手排查,求有类似问题排查经验的人指点。
堆栈跟踪
ERROR c.e.h.q.ExceptionHandler [vert.x-eventloop-thread-0] Unhandled error Internal Server Error: java.lang.IllegalArgumentException: org.hibernate.query.SyntaxException: At 1:65, token recognition error at: '^@' [FROM MyEntity WHERE instanceId^@^@^@^@^@] at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:143) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:167) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:173) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:848) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:753) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:136) at io.quarkus.hibernate.orm.runtime.session.TransactionScopedSession.createQuery(TransactionScopedSession.java:367) at org.hibernate.engine.spi.SessionLazyDelegator.createQuery(SessionLazyDelegator.java:558) at org.hibernate.engine.spi.SessionLazyDelegator.createQuery(SessionLazyDelegator.java:67) at org.hibernate.Session_OpdLahisOZ9nWRPXMsEFQmQU03A_Synthetic_ClientProxy.createQuery(Unknown Source) at io.quarkus.hibernate.orm.panache.common.runtime.CommonPanacheQueryImpl.createBaseQuery(CommonPanacheQueryImpl.java:366) at io.quarkus.hibernate.orm.panache.common.runtime.CommonPanacheQueryImpl.createQuery(CommonPanacheQueryImpl.java:344) at io.quarkus.hibernate.orm.panache.common.runtime.CommonPanacheQueryImpl.singleResultOptional(CommonPanacheQueryImpl.java:315) at io.quarkus.hibernate.orm.panache.runtime.PanacheQueryImpl.singleResultOptional(PanacheQueryImpl.java:174) at org.example.MyStore.getInstance(MyStore.java:85) at org.example.MyStore_Subclass.getInstance$$superforward(Unknown Source) at org.example.MyStore_Subclass$$function$$1.apply(Unknown Source) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62) at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136) at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107) at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38) at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61) at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32) at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source) at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30) at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27) at org.example.MyStore_Subclass.getInstance(Unknown Source) at org.example.MyStore_ClientProxy.getInstance(Unknown Source) at org.example.MyWebServiceImpl.lambda$files$1(MyWebServiceImpl.java:84) at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21) at io.smallrye.mutiny.operators.uni.builders.UniCreateFromItemSupplier.subscribe(UniCreateFromItemSupplier.java:28) at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) at io.smallrye.mutiny.operators.uni.UniRunSubscribeOn.lambda$subscribe$0(UniRunSubscribeOn.java:27) at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:582) at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29) at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:1583)
相关代码
getInstance()方法仅调用PanacheRepositoryBase::find("instanceId", instanceId),代码如下:
public class MyStore implements PanacheRepositoryBase<MyEntity, String> { // ..SNIP other methods @Transactional public MyOtherEntity getInstance(String instanceId) { var entity = find("instanceId", instanceId).singleResultOptional().orElse(null); return entityMapper.map(entity); } }
环境信息
- 未编译为原生代码
- 服务运行在AWS实例中,已完全重启但错误仍存在
- 当前使用Quarkus 3.7.1,其他版本也出现过该问题
内容的提问来源于stack exchange,提问作者Rasmus Faber
相关产品推荐
相关产品推荐

