1. 程式人生 > >springboot的@cachePut在使用資料庫更新資料時一些奇怪的問題

springboot的@cachePut在使用資料庫更新資料時一些奇怪的問題

在使用@CachePut來更新快取的時候,控制檯報如下錯誤:

java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to java.base/java.util.List
    at cn.dxszxw.service.serviceImpl.ExamServiceImpl$$EnhancerBySpringCGLIB$$3dbd9456.getAllFalses(<generated>) ~[classes/:?]
    at *********.controller.xcxDataController.getAllFalses(xcxDataController.java:1151) ~[classes/:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]

java.base/java.lang.Integer cannot be cast to java.base/java.util.List就是在更新快取的時候,我用資料庫更新的返回值為int,但是更新快取@cachePut的值是list了

解決辦法就是把int改成list就行了,具體實施過程就是把list弄成int那樣能識別出資料庫是不是插入資料成功了。

問題來了。。。。當我改成int成list的時候,能自動更新了ExamFalses這個list快取了,但是更新的是隻有插入資料的快取,之前的快取被清空了,最後只剩下更新的快取。可能過程我理解錯了,但是我覺得如果這樣更新的話還不如在每次插入資料的時候先把快取刪除掉,然後要呼叫getAllFalses方法的時候再重新存入快取快而省事。

總結:如果用list型別的存快取,不推薦用@cachePut來更新快取。

如理解有誤,望指出