jetcache
jetcache copied to clipboard
是否考虑 Spring Boot 3.X 支持?
本月底 Spring Boot 3.X 即将发布。相关的生态都已经在着手适配,很多都已经出了 M 版 或 RC 版。
今天开始,我也在尝试做适配准备。抛开新特性不说,目前看主要是 javax 变更为 Jakarta 引起的包名变更。
不知道大佬是否准备支持或者适配?如果计划支持,能否考虑先出一个 M 版 或 RC 版?
boot3我没用过,现在有什么问题吗?
我也是在做升级准备,现在发现的问题还不全面。
目前发现的最主要的问题是:
问题一:
使用 Spring Boot 2.7.X CacheManager 的注入以及自己代码顺序控制(自己要手动创建 Cache,依赖 JetCache 的 CacheManager,所以自己的相关的配置,要在 JetCache配置完成之后进行),没有任何问题。
升级至 Spring Boot 3.0.0-RC1,发现注入CacheManager就出现了问题。当然这肯定不是 JetCache的问题。我自己的其它 starter 也有这个问题。我自己的包是将 spring.factories 替换为 2.7.X 开始支持的新版格式 org.springframework.boot.autoconfigure.AutoConfiguration.imports 解决的。
所以猜测和 starter 的 spring.factories 配置有关。逻辑上 Spring Boot 2.7.X 是同时支持 spring.factories 和 新版格式的,因为 Spring Boot 3 还没有正式发布,没有官宣,不知道是不是这个原因导致。所以现在我的临时解决办法就是不使用jetcache-starter-redis-lettuce 包,而是直接依赖 jetcache-starter-redis-lettuce 中的依赖,然后自己配置 org.springframework.boot.autoconfigure.AutoConfiguration.imports。
问题二:
Spring Boot 3.X 默认使用 JDK 17。目前看现在的 JetCache 也没问题。主要一个点是就是依赖包的版本更新,Spring Boot 3 开始,javax. 开头的包全部都改为了 jakarta。JetCache 中依赖的是javax.annotation-api,Spring Boot 3 依赖的就是 jakarta.annotation-api。依赖两个不同版本的包也无可厚非,一个小问题就是在升级调整代码的时候会产生遗漏,没有依赖 JetCache 的模块中,IDE就会提示错误,需要更改包的引入 javax 改为jakarta;有依赖 JetCache的模块,IDE就不会提示升级了。其实这应该不算是问题,勉强算是个小建议,仅供参考,望大佬考虑。
spring boot 3.0对应的是spring 6.0了,对应的jedis/lettuce应该也要更新,估计会有一些问题,等正式发布了我再看看吧。
你要是有兴趣也可以贡献哦
成,没问题。等我把手上的适配工作整完,就来试着提个PR。
新版本什么时候可以支持下SB3?新项目还是非常希望能够把jetcache包含进来。
@areyouok 关于自动装配 #740 2.7和2.7-是兼容,直接加上就行
我前些天大致试过,但是还没有全面测试。过几天我推进一下。
👍
目前报这个错
已经更新了jetcache2.7.2,单元测试都可以通过,应该可以在boot3下做基本的运行。
jetcache 2.7.2默认传递的spring boot仍然是2.7.5,如果用boot3,jedis/lettuce之类的版本依赖如有冲突,自己解决。
请问一下大佬,2.8版本有计划周期不? 目前springboot3.0,jetcache2.7.2遇到如下问题: 测试代码: private Cache<String, RouteDefinition> gatewayRouteCache; @Autowired private ReactiveRedisTemplate<String,RouteDefinition> reactiveRedisTemplate;
-
reactiveRedisTemplate.opsForValue().set("routeId123",routeDefinition).subscribe();
-
gatewayRouteCache.put("routeId456", routeDefinition);
其中1可以正确执行,2报错。报错信息如下:
com.alicp.jetcache.support.CacheEncodeException: Java Encode error. msg=org.springframework.cloud.gateway.route.RouteDefinition at com.alicp.jetcache.support.JavaValueEncoder.apply(JavaValueEncoder.java:57) ~[jetcache-core-2.7.2.jar:na] at com.alicp.jetcache.support.JavaValueEncoder.apply(JavaValueEncoder.java:15) ~[jetcache-core-2.7.2.jar:na] at com.alicp.jetcache.redis.lettuce.RedisLettuceCache.do_PUT(RedisLettuceCache.java:108) ~[jetcache-redis-lettuce-2.7.2.jar:na] at com.alicp.jetcache.AbstractCache.PUT(AbstractCache.java:255) ~[jetcache-core-2.7.2.jar:na] at com.alicp.jetcache.Cache.PUT(Cache.java:364) ~[jetcache-core-2.7.2.jar:na] at com.alicp.jetcache.Cache.put(Cache.java:74) ~[jetcache-core-2.7.2.jar:na] at com.alicp.jetcache.SimpleProxyCache.put(SimpleProxyCache.java:43) ~[jetcache-core-2.7.2.jar:na] at com.wicket.gateway.web.CacheTest.loadRouteDefinition(CacheTest.java:99) ~[test-classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na] at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) ~[junit-4.13.1.jar:4.13.1] at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) ~[junit-4.13.1.jar:4.13.1] at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:76) ~[spring-test-6.0.3.jar:6.0.3] at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) ~[spring-test-6.0.3.jar:6.0.3] at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) ~[spring-test-6.0.3.jar:6.0.3] at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) ~[spring-test-6.0.3.jar:6.0.3] at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) ~[spring-test-6.0.3.jar:6.0.3] at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) ~[spring-test-6.0.3.jar:6.0.3] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) ~[spring-test-6.0.3.jar:6.0.3] at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) ~[spring-test-6.0.3.jar:6.0.3] at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) ~[spring-test-6.0.3.jar:6.0.3] at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) ~[junit-4.13.1.jar:4.13.1] at org.junit.runners.ParentRunner.run(ParentRunner.java:413) ~[junit-4.13.1.jar:4.13.1] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) ~[spring-test-6.0.3.jar:6.0.3] at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ~[junit-4.13.1.jar:4.13.1] at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) ~[junit-rt.jar:na] at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na] at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na] at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na] at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) ~[junit-rt.jar:na] at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) ~[junit-rt.jar:na] Caused by: java.io.NotSerializableException: org.springframework.cloud.gateway.route.RouteDefinition at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1197) ~[na:na] at java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1582) ~[na:na] at java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1539) ~[na:na] at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1448) ~[na:na] at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191) ~[na:na] at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) ~[na:na] at com.alicp.jetcache.support.JavaValueEncoder.apply(JavaValueEncoder.java:48) ~[jetcache-core-2.7.2.jar:na] ... 40 common frames omitted
请大佬指点迷津。