Java Hazelcast';s IsScheduledExecutorService可以';t序列化任务

Java Hazelcast';s IsScheduledExecutorService可以';t序列化任务,java,spring,serialization,scheduled-tasks,hazelcast,Java,Spring,Serialization,Scheduled Tasks,Hazelcast,我的项目中有一个Hazelcast,它在集群中的两个成员上工作。同时,我使用Hazelcast的isScheduledExecutorService来调度任务,该任务从数据库中获取一些数据,并以固定速率将其放入缓存中 问题是,我的任务类(该调度器的任务)有一些字段无法序列化(isScheduledExecutorService尝试这样做),例如mybatis Mappers和hazelcast的CacheManager,它们从DB获取数据并将数据放入缓存 我尝试使用Spring的功能,例如在该字

我的项目中有一个Hazelcast,它在集群中的两个成员上工作。同时,我使用Hazelcast的
isScheduledExecutorService
来调度任务,该任务从数据库中获取一些数据,并以固定速率将其放入缓存中

问题是,我的任务类(该调度器的任务)有一些字段无法序列化(
isScheduledExecutorService
尝试这样做),例如mybatis Mappers和hazelcast的CacheManager,它们从DB获取数据并将数据放入缓存

我尝试使用Spring的功能,例如在该字段上使用
@Autowire
,在类上使用
@SpringAware
,但没有成功

可能有一些我不知道的Hazelcast或Spring功能?任何帮助都将不胜感激

我的任务类:

@Service
@SpringAware
public class MyTask implements Runnable, Serializable {

private static final Logger LOG = LoggerFactory.getLogger(MyTask.class);

private static final String CACHE1 = "cache1";
private static final String CACHE2 = "cache2";
private static final String KEY1 = "key1";
private static final String KEY2 = "key2";

@Autowired
private MapperOne mapperOne;

@Autowired
private MapperTwo mapperTwo;

@Autowired
// if mark it 'transient' it would be null for other threads
private transient CacheManager cacheManager;

@Override
public void run() {
    LOG.info("ABOUT TO UPDATE CACHE");
    List<SomeStuff> stuff1 = mapperOne.getData();
    List<OtherStuff> stuff2 = mapperTwo.getData();

    cacheManager.getCache(CACHE1).put(KEY1, stuff1);
    cacheManager.getCache(CACHE2).put(KEY2, stuff2);
}

}@SpringAware在默认情况下被禁用。(请参见禁用它的原因)您需要通过声明
或类似的编程方式来启用它

@Service
public class MySchedulerService {

@Autowired
private MyTask myTask;

@PostConstruct
void init() {
    if (hazelcastInstance.getCluster().getMembers().iterator().next().localMember()) {
        IScheduledExecutorService notificationCacheService =
            hazelcastInstance.getScheduledExecutorService("myService");
        notificationCacheService.scheduleOnKeyOwnerAtFixedRate(
            myTask, hazelcastInstance.getCluster().getLocalMember(), 0, 15, TimeUnit.SECONDS);
    }
}