ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JCache只缓存部分字段

2019-03-15 09:38:45  阅读:259  来源: 互联网

标签:AlertRuleProjectBean JCache 缓存 bean resultBean key 父类 部分 public


项目中使用的JCache缓存实体,发现每次缓存时存进去了实体,取出的时候字段有些是空的。

具体环境为

Springboot v2.01

JCache(ehcache 3.4.0)

jdk 1.8.0_201

maven 3.6.0

 

最开始以为是取的时候无法取出父类的字段(实体继承了一个父类,空的字段都是父类的字段,所以定位到取的问题)。

 

 1 @MappedSuperclass
 2 @Data
 3 //@Entity
 4 public class AlertRuleSuperBean {
 5     /**
 6      * 报警规则主键
 7      */
 8     @Id
 9     @GeneratedValue(strategy = GenerationType.IDENTITY)
10     @Column(name = "alert_rule_id")
11     protected Integer alertRuleId;
12 }

 

决定手动赋值

 1 @Service
 2 @EnableCaching
 3 public class CacheServiceImpl implements CacheService {
 4 
 5     @Override
 6     @Cacheable(key = "#key",cacheNames = "dtuRule")
 7     public AlertRuleProjectBean doDtuRule(String key, AlertRuleProjectBean bean) {
 8         System.out.println("I am a doDtuRule!key is "+ key);
 9         //只缓存子类bug,所以手动赋值
10         AlertRuleProjectBean resultBean=new AlertRuleProjectBean();
11         resultBean.setDtuEventTimestamp(bean.getDtuEventTimestamp());
12         resultBean.setProjectId(bean.getProjectId());
13         resultBean.setAlertRuleMax(bean.getAlertRuleMax());
14         resultBean.setAlertRule(bean.getAlertRule());
15         resultBean.setAlertRuleStatus(bean.getAlertRuleStatus());
16         resultBean.setAlertRuleMin(bean.getAlertRuleMin());
17         resultBean.setDtu_data_id(bean.getDtu_data_id());
18         resultBean.setAlertConditionType(bean.getAlertConditionType());
19         resultBean.setAlertPriority(bean.getAlertPriority());
20         resultBean.setAlertRuleId(bean.getAlertRuleId());
21         resultBean.setAlertRuleName(bean.getAlertRuleName());
22         resultBean.setSmoothTime(bean.getSmoothTime());
23         resultBean.setAlertType(bean.getAlertType());
24         resultBean.setIsProjectUserVisual(bean.getIsProjectUserVisual());
25         resultBean.setRuleStatus(bean.getRuleStatus());
26         resultBean.setTimestamp(bean.getTimestamp());
27         return resultBean;
28     }
29 
30     @Override
31     @CacheEvict(key="#key",condition = "#key!='mfb'",cacheNames = "dtuRule",allEntries = false)
32     public void removeDtuRule(String key) {
33         System.out.println("cache removed!key is "+key);
34 
35     }
36 }

 

赋值后仍然是部分为空,完全没有效果!

试着取消继承(将继承的一些父类字段手动copy到子类,取消extend),问题解决!

 

标签:AlertRuleProjectBean,JCache,缓存,bean,resultBean,key,父类,部分,public
来源: https://www.cnblogs.com/dzxw2371/p/10535039.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有