cannot be cast to linux 环境,[Redis] ** cannot be cast to java.lang.String
先上问题:
java.lang.ClassCastException: com.ppdai.cbd.ddp.thirdparty.contract.bhxtzx.BHXTZXTask cannot be cast to java.lang.String
at org.springframework.data.redis.serializer.StringRedisSerializer.serialize(StringRedisSerializer.java:33)
at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:117)
at org.springframework.data.redis.core.DefaultListOperations.leftPush(DefaultListOperations.java:71)
at org.springframework.data.redis.core.DefaultBoundListOperations.leftPush(DefaultBoundListOperations.java:60)
at com.ppdai.realtime.datachannel.pullservice.entity.RedisQueue.pushFromHead(RedisQueue.java:63)
at com.ppdai.realtime.datachannel.pullservice.redisconfig.RedisTaskSender.sendTask(RedisTaskSender.java:35)
at com.ppdai.realtime.datachannel.pullservice.redisconfig.RedisTaskSender$sendTask.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at com.ppdai.realtime.datachannel.pullservice.dataproviders.bohai.BohaiQueryProvider.afterGetData(BohaiQueryProvider.groovy:395)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
看问题原因是序列化对象的时候使用的是 StringRedisSerializer, 本来以为是因为AutoConfig 导致加载了系统默认的RedisTemplate, 而自己定义了RedisTemplate没有加载,
但是非常疑惑的一点是默认的RedisTemplate使用的是 JdkSerializationRedisSerializer(如下代码),上面异常报的是使用redis value 使用StringRedisSerializer 导致的类型转化失败
public voidafterPropertiesSet() {super.afterPropertiesSet();boolean defaultUsed = false;if (defaultSerializer == null) {
defaultSerializer= newJdkSerializationRedisSerializer(
classLoader!= null ? classLoader : this.getClass().getClassLoader());
}if(enableDefaultSerializer) {if (keySerializer == null) {
keySerializer=defaultSerializer;
defaultUsed= true;
}if (valueSerializer == null) {
valueSerializer=defaultSerializer;
defaultUsed= true;
}if (hashKeySerializer == null) {
hashKeySerializer=defaultSerializer;
defaultUsed= true;
}if (hashValueSerializer == null) {
hashValueSerializer=defaultSerializer;
defaultUsed= true;
}
}if (enableDefaultSerializer &&defaultUsed) {
Assert.notNull(defaultSerializer,"default serializer null and not all serializers initialized");
}if (scriptExecutor == null) {this.scriptExecutor = new DefaultScriptExecutor(this);
}
initialized= true;
}
最后通过Alt + F7 (Find Usage) 发现下面这个代码
private Long incr(String key, longdelta){
RedisTemplate redisTemplate=getRedisTemplate()
ValueOperations operations =redisTemplate.opsForValue()
redisTemplate.setKeySerializer(newStringRedisSerializer())
redisTemplate.setValueSerializer(newStringRedisSerializer())returnoperations.increment(key, delta)
}
原来就是这里搞得鬼,将redisTemplate的ValueSerializer设置成了 StringRedisSerializer ,StringRedisSerializer参数是String类型的,因此就出现了类型转化错误。
附说明
redisTemplate需要序列化key,value,hashkey,hashvalue, 提供了很多序列化工具,什么Jackson、FastJson、JDKSerialization 也可以自己定义。
redisTamplate默认这四种都使用JDKSerialization做序列化,如果没有提供定义默认都用JDK。
cannot be cast to linux 环境,[Redis] ** cannot be cast to java.lang.String相关推荐
- ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
错误堆栈: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]at android. ...
- 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
Map<String,Object> parametersmap=invocation.getInvocationContext().getParameters();//获取请求参数 ...
- Java报错:java.math.BigDecimal cannot be cast to java.lang.String
从数据库取数字,转为string,报错: java.math.BigDecimal cannot be cast to java.lang.String 错误代码 Integer.parseInt(( ...
- “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...
- java.lang.ClassCastException: [B cannot be cast to java.lang.String
java.lang.ClassCastException: [B cannot be cast to java.lang.String 错误代码行: public int addZTIncome(ZT ...
- java.lang.String cannot be cast to org.apache.flink.table.data.StringData
完整报错: 16:54:56,851 INFO org.apache.hadoop.conf.Configuration.deprecation - io.bytes.per.checksum is ...
- 已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!!
已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 1.在执 ...
- org.springframework.boot.actuate.endpoint.EndpointId cannot be cast to java.lang.String 异常处理
转自:https://blog.csdn.net/qq_38906421/article/details/84028240 java.lang.ClassCastException: org.s ...
- SpringBoot统一返回处理出现cannot be cast to java.lang.String异常
SpringBoot统一返回处理出现cannot be cast to java.lang.String异常 一 问题出现背景: 二 解决方案 三 异常原因分析 原因: 源码详细分析: 正常返回: 返 ...
最新文章
- 《Haskell趣学指南》—— 第1章,第1.2节小朋友的第一个函数
- oracle10G rac 10.2.0.1升级10.2.0.4
- 随机抽样java_java生成抽样随机数的多种算法
- android透明状态栏刘海屏,Android 修改dialog状态栏颜色兼容刘海屏
- jython语法入门
- mysql libs 5.1.73_【MySQL案例】mysql-libs-5.1.73-3.el6
- 惠农补贴一折通计算机审计方法,审计惠农补贴资金的方法有哪些
- MySQL 服务无法启动。服务没有报告任何错误。
- Java JDK下载与安装教程
- vue集成spreadjs
- 悼念毛星云(浅墨)老师
- QTabWidget 删除tab
- 计算机访问网络延迟越低越好吗,内存延迟参数是否越低越好
- 截取字符串中某一段数据
- java中Date类之GMT、UTC
- 加元预测:油价仍是关键驱动因素 - 加元/日元、美元/加元设置
- 程序员的算法趣题:Q09 落单的男女(Java版)
- Ubuntu18.04+Win10双系统安装步骤 问题排查
- InputStream类详解
- 【XJTUSE 计算机组成与结构笔记】第十三章 精简指令集计算机
热门文章
- fiddler模拟伪造请求
- Google Geocoding API---地理编码与反向地理编码
- 如果用计算机计算带有大括弧的数学题,小学一年级数学上册图画大括号应用题doc...
- 高通win10电脑软件兼容测试,微软把高通处理器装在了Win 10上,那又怎样呢?
- vc++实现悬浮窗,迅雷360悬浮球效果
- uniapp通过uni.addInterceptor实现路由拦截功能
- Python实例003:海龟绘图——小猪佩奇祝大家“2019新春快乐”
- 学生个人博客网页设计作品 学生个人网页模板 个人网页制作 HTML学生个人网站作业设计
- 中国电信发军医疗器械领域
- 22岁到72岁的男人对女人的要求