【发布时间】:2020-03-30 10:21:03
【问题描述】:
有没有办法将Spring boot devtools的自动重启功能与ActiveJDBC的instrumentation功能结合起来?
每次模型或DB发生变化时也需要提供instrumentation,但是Spring boot的devtools端有Auto-Restart时生成的代码是由ActiveJDBC端的instrumentation生成的与代码发生异步,即使是源码上的同一个类,也不会匹配,会报错,不能强制转换。
例如。
class dev.logue.sample.models.User cannot be cast to class dev.logue.sample.models.User (dev.logue.sample.models.User is in unnamed module of loader 'app'; dev.logue.sample.models.User is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader
我对Java不是很熟悉,有什么方法可以同步这个过程吗?
我的环境:
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment Zulu11.37+17-CA (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM Zulu11.37+17-CA (build 11.0.6+10-LTS, mixed mode)
【问题讨论】:
-
为什么不在构建过程中检测?你还需要编译,对吗?
-
我认为发生了错误,即使与上述错误消息中的类相同,也无法转换该类。
-
您是否在检测后重新启动该过程?
-
是的。但是,当我修改其他代码时,Spring devtools 重新加载,最终导致上述错误。如果不能投同一个类,我想可能是Spring生成的二进制和ActiveJDBC的Instrument生成的二进制不匹配造成的。
-
不,真正的原因是因为类的不同实例被不同的类加载器加载。用不同的类加载器加载的同一个类被 JVM 视为不同的类。我不熟悉 SpringBoot,但我认为这是问题的原因。刚重新启动进程时是否有同样的问题?
标签: java spring-boot instrumentation activejdbc spring-boot-devtools