因为用到Shiro 整合redis 所以就把 sesion 放在redis 里面,然后取出来的时候,一直报错 A
java.lang.ClassCastException:异常 A cannot be cast to A 这样的错误,这里找了半天错误, 实在是找不出来, 之前怀疑是 类加载器的问题, 但是本人小白一个,对类加载器 不是很了解·····
这个问题一直得不到解决
后来在网上看到可能是
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
这个包的原因, 但是看了下没有这个包,
但是我项目里面有 spring-devtools.properties这个文件
有一项配置 #restart.include.beetl=/beetl-2.7.15.jar
这个应该就是原因了。
后来在一篇帖子下面的评论下找到了答案,这位大佬跟我一样, 在做shiro session 的时候 使用的是 org.crazycake:shiro-redis 这个包,
在项目 /resource/META-INF目录下(如果没有就创建一个)创建
spring-devtools.properties文件 加入下面代码:
restart.include.mapper=/mapper-[\w-\.]+jar
restart.include.pagehelper=/pagehelper-[\w-\.]+jar
restart.include.shiro=/shiro-[\w-\.]+jar
这里其实是
添加 jar 包到 restart 类加载器中 =
后面是具体的 jar 包名称, 或正则表达式
原因 DevTools 默认会对IDE中引入的所有的项目使用 restart 类加载器,对引入的jar包使用Base类加载器 因此要保证热部署时使用的类加载器一致就好了。
总结下: 我的原因就是类加载器不同所有才会出现这个错误,同是一个类,但是就是不能转换。问题是解决了,具体原因可能说的不太清楚, 这个错误也可能是别的原因造成的。说的不对的地方, 请指教。本人小白。