package com.rdss.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
public class ScheduledPoolConfig {
@Bean("scheduledThreadPool")
public ScheduledThreadPoolExecutor config(){
ScheduledThreadPoolExecutor executor = (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
executor.setMaximumPoolSize(Runtime.getRuntime().availableProcessors() * 2);
executor.setRejectedExecutionHandler( new ThreadPoolExecutor.AbortPolicy());
return executor;
}
}
package com.rdss.bus.process;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
public class ApplicationInitializer implements Ordered, InitializingBean, ApplicationContextAware {
private ApplicationContext applicationContext;
@Qualifier("scheduledThreadPool")
@Autowired
private ScheduledThreadPoolExecutor executor;
@Override
public void afterPropertiesSet() throws Exception {
executor.scheduleWithFixedDelay(applicationContext.getBean(PlatformMsgPersist.class), 5, 3, TimeUnit.SECONDS);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public int getOrder() {
return Integer.MAX_VALUE;
}
}
package com.rdss.bus.process;
import com.alibaba.fastjson.JSONArray;
import com.rdss.bus.mapper.PlatformMsgMapper;
import com.rdss.bus.model.entity.PlatformMsg;
import com.rdss.bus.model.vo.BlockQueueDataCacheMgr;
import com.rdss.bus.service.BdCommShardingService;
import com.rdss.bus.service.BdCommTableRecordService;
import com.rdss.common.entity.BdCommTableRecord;
import com.rdss.common.enums.Constant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Component(value = "executePlatformMsgPersist")
@Scope("prototype")
public class PlatformMsgPersist implements Runnable, ApplicationContextAware, InitializingBean{
private ApplicationContext applicationContext;
Map<String, PlatformMsgMapper> beans = new HashMap();
@Autowired
BdCommTableRecordService bdCommTableRecordService;
@Autowired
private BdCommShardingService bdCommShardingService;
@Override
public void run() {