一、该问题的重现步骤是什么?
1. 调用blade-system的部门详情接口bladex平台这边就会SysCache.getDept(dept.getParentId()) 缓存部门信息
2. Bladex-Biz这边使用 SysCache.getDept(deptId) 就会获取失败
3. 发现Bladex和Bladex-Biz两边调用SysCache.getDept(deptId) 实际缓存的redis数据格式是不一样的,Bladex这边是protostuff
Bladex-Biz这边是json
主要是目前发现blade.yaml
blade:
redis:
serializer-type: protostuff 的redis配置只对bladex中使用的地方生效,平台端这边调用SysCache.getDept(dept.getParentId()) SysCache使用的是protostuff格式,业务端却是json格式 ,可以咨询下怎么可以让业务端这边也生效blade.yaml 中的blade.redis.serializer-type 配置么,因为发现BladeX-Biz实际存的是json,平台和业务端都是用的时候业务端缓存的,到了平台端Bladex就反序列号就有问题啦,同理平台端缓存的业务端这边是用业务端也会报错.
二、你期待的结果是什么?实际看到的又是什么?
期待的结果是:
Bladex和Bladex-Biz都能够跟着配置blade.yaml使用同一个序列化策略
blade:
redis:
serializer-type: protostuff
实际看到的Bladex和Bladex-Biz两边调用SysCache.getDept(deptId) 实际缓存的redis数据格式是不一样的,Bladex这边是protostuff
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
正在使用的是BladeX 企业版 3.4.0.RELEASE 在macOs系统
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
先确定biz有没有引入protostuff的依赖,然后在biz项目失效的服务内写一个config类试试,打个断点看看执行的那一个返回。代码如下
@AutoConfiguration(before = RedisTemplateConfiguration.class)
public class ProtoStuffSerializerAutoConfiguration implements BladeRedisSerializerConfigAble {
@Bean
@Override
public RedisSerializer<Object> redisSerializer(BladeRedisProperties properties) {
if (BladeRedisProperties.SerializerType.ProtoStuff == properties.getSerializerType()) {
return new ProtoStuffSerializer();
}
return defaultRedisSerializer(properties);
}
}
我试了下,断点就是不会走这个新加的配置类ProtoStuffSerializerAutoConfiguration,进入的是RedisTemplateConfiguration配置感觉ProtoStuffSerializerAutoConfiguration配置类好像在Biz中好像就不会执行
如果实在不能不能找到问题解决的话,如果直接改blade-starter-redis的RedisTemplateConfiguration类加上上面的逻辑是不是也可以解决. 因为这个类目前Biz失效的项目一定会走的,不过也很想知道为啥连上面那个测试的好像都不执行比较奇怪 @AutoConfiguration(before= RedisTemplateConfiguration.class) public class ProtoStuffSerializerAutoConfiguration implements BladeRedisSerializerConfigAble { @Override public RedisSerializer<Object> redisSerializer(BladeRedisProperties properties) { if (BladeRedisProperties.SerializerType.ProtoStuff == properties.getSerializerType()) { return new ProtoStuffSerializer(); } return defaultRedisSerializer(properties); } }
你试试blade-demo工程下新增配置类是否可以生效, 我这边是可以的。再看看你自己新建的包名是否有做对应的扫描
在demo中试过了没有用,因为之前新建工程就是照着demo来建立的工程,后来就是按照上面那种方式暂时处理的.
扫一扫访问 Blade技术社区 移动端