package project.monitor.job.transferfrom; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.task.TaskExecutor; import kernel.util.ThreadUtils; import util.LockFilter; public class TransferFromServer implements Runnable { private static Logger logger = LoggerFactory.getLogger(TransferFromServer.class); // 这个缓存池配置为0 private TaskExecutor taskExecutor; private TransferFromService transferFromService; public void start() { new Thread(this, "TransferFromServer").start(); if (logger.isInfoEnabled()) { logger.info("启动地址(账户)的账户授权转账(TransferFromServer)服务!"); } } @Override public void run() { while (true) { try { TransferFrom item = TransferFromQueue.poll(); if (item != null) { taskExecutor.execute(new HandleRunner(item)); }else { ThreadUtils.sleep(1000); } } catch (Throwable e) { logger.error("TransferFromServer taskExecutor.execute() fail", e); } } } public class HandleRunner implements Runnable { private TransferFrom transferFrom; boolean lock = false; public HandleRunner(TransferFrom transferFrom) { this.transferFrom = transferFrom; } public void run() { try { while (true) { if (!LockFilter.add(transferFrom.getAutoMonitorWallet().getId().toString())) { ThreadUtils.sleep(100); continue; } break; } lock = true; transferFromService.saveTransferFrom(transferFrom); } catch (Throwable t) { logger.error("TransferFromServer taskExecutor.execute() fail", t); }finally { if (lock) { LockFilter.remove(transferFrom.getAutoMonitorWallet().getId().toString()); } } } } public void setTaskExecutor(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } public void setTransferFromService(TransferFromService transferFromService) { this.transferFromService = transferFromService; } }