| src/main/java/com/nq/utils/task/YEBTask.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/utils/task/news/NewsTask.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/utils/task/stock/CarryPositionTask.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/utils/task/stock/StockTask.java | ●●●●● patch | view | raw | blame | history |
src/main/java/com/nq/utils/task/YEBTask.java
@@ -1,15 +1,13 @@ package com.nq.utils.task; import com.nq.service.IEchoServices; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.atomic.AtomicBoolean; /** * 余额宝定时任务 @@ -18,34 +16,30 @@ @Component public class YEBTask { @Autowired IEchoServices echoServices; private IEchoServices echoServices; boolean sendYEBMoney = true; private final Lock sendYEBMoneyLock = new ReentrantLock(); private final ReentrantLock sendYEBMoneyLock = new ReentrantLock(); private final AtomicBoolean isSendYEBMoney = new AtomicBoolean(false); /** * 余额宝发放利息 */ @Scheduled(cron = "0 0/1 * * * ?") public void sendYEBMoney() { if (sendYEBMoney) // 定义一个布尔变量,代表新闻任务是否在处理中 if (isSendYEBMoney.get()) { // 判断任务是否在处理中 return; sendYEBMoney = true; // 设置处理中标识为 true if (sendYEBMoneyLock.tryLock()) { } if (sendYEBMoneyLock.tryLock()) { // 尝试获取锁 isSendYEBMoney.set(true); // 设置处理中标识为true try { log.info("基金定时任务-------开始"); echoServices.sendMoney(); log.info("基金定时任务-------结束"); } finally { sendYEBMoneyLock.unlock(); sendYEBMoney = false; sendYEBMoneyLock.unlock(); // 释放锁 isSendYEBMoney.set(false); // 设置处理中标识为false } } } } src/main/java/com/nq/utils/task/news/NewsTask.java
@@ -14,6 +14,7 @@ import org.springframework.stereotype.Component; import java.util.Date; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //import org.springframework.scheduling.annotation.Scheduled; @@ -29,7 +30,9 @@ @Autowired ISiteArticleService iSiteArticleService; boolean NewsInfoTask = true; private final AtomicBoolean NewsInfoTask = new AtomicBoolean(false); private final Lock NewsInfoTaskLock = new ReentrantLock(); /* @@ -37,18 +40,19 @@ * */ @Scheduled(cron = "0 0/5 * * * ?") public void NewsInfoTask() { if (NewsInfoTask) // 定义一个布尔变量,代表新闻任务是否在处理中 if (NewsInfoTask.get()) { // 判断任务是否在处理中 return; NewsInfoTask = true; // 设置处理中标识为 true } if (NewsInfoTaskLock.tryLock()) { // 加锁 try { NewsInfoTask.set(true); // 设置处理中标识为true System.out.println("新闻定时任务---->开始"); iSiteNewsService.grabNews(); } catch (Exception e) { System.err.println("新闻抓取出现异常: " + e.getMessage()); // 打印具体的异常信息 } finally { NewsInfoTaskLock.unlock(); // 释放锁 NewsInfoTask = false; // 设置处理中标识为 false NewsInfoTask.set(false); // 设置处理中标识为false System.out.println("新闻定时任务---->结束"); } } src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -23,6 +23,7 @@ import java.math.BigDecimal; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -56,15 +57,17 @@ private final Lock subscriptionLock = new ReentrantLock(); boolean ballot = true; private final AtomicBoolean ballot = new AtomicBoolean(false); @Scheduled(cron = "0 0/10 * * * ?") public void ballot() { if (ballot) // 定义一个布尔变量,代表新闻任务是否在处理中 if (ballot.get()) { // 判断任务是否在处理中 return; ballot = true; } if (ballotLock.tryLock()) { try { ballot.set(true); // 设置处理中标识为true log.info("新股上市转持仓定时任务--------->开始"); List<StockSubscribe> stockSubscribes = stockSubscribeMapper.selectList(new LambdaQueryWrapper<StockSubscribe>() .lt(StockSubscribe::getListDate, DateUtil.date())); @@ -88,21 +91,23 @@ log.error("新股上市转持仓定时任务发生异常", e); } finally { ballotLock.unlock(); ballot = false; ballot.set(false); // 设置处理中标识为false } } else { log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略"); } } boolean subscription = true; private final AtomicBoolean subscription = new AtomicBoolean(false); @Scheduled(cron = "0 0/1 * * * ?") public void subscription() { if (subscription) // 定义一个布尔变量,代表新闻任务是否在处理中 if (subscription.get()) { // 判断任务是否在处理中 return; subscription = true; } if (subscriptionLock.tryLock()) { try { subscription.set(true); // 设置处理中标识为true log.info("自动转已认缴--------->开始"); List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>() .eq(UserStockSubscribe::getStatus, 3)); @@ -118,7 +123,7 @@ log.error("自动转已认缴定时任务发生异常", e); } finally { subscriptionLock.unlock(); subscription = false; subscription.set(false); // 设置处理中标识为false } } else { log.info("自动转已认缴定时任务--------->上次任务还未执行完成,本次任务忽略"); src/main/java/com/nq/utils/task/stock/StockTask.java
@@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -52,7 +53,8 @@ private static final Logger log = LoggerFactory.getLogger(StockTask.class); boolean syncINStockData = true; private final AtomicBoolean syncINStockData = new AtomicBoolean(false); private final Lock syncINStockDataLock = new ReentrantLock(); @@ -61,16 +63,16 @@ */ @Scheduled(cron = "0 0 0/2 * * ?") public void syncINStockData() { if (syncINStockData) // 定义一个布尔变量,代表新闻任务是否在处理中 if (syncINStockData.get()) { // 判断任务是否在处理中 return; syncINStockData = true; } if (syncINStockDataLock.tryLock()) { try { syncINStockData.set(true); // 设置处理中标识为true loadAllStock(EStockType.IN); // loadAllStock(EStockType.HK); } finally { syncINStockDataLock.unlock(); syncINStockData = false; syncINStockData.set(false); // 设置处理中标识为false } } } @@ -170,18 +172,19 @@ } } boolean stockConstraint = true; private final AtomicBoolean stockConstraint = new AtomicBoolean(false); /** * 强制平仓 */ @Scheduled(cron = "0/1 * * * * ?") public void stockConstraint() { if (stockConstraint) // 定义一个布尔变量,代表新闻任务是否在处理中 if (stockConstraint.get()) { // 判断任务是否在处理中 return; stockConstraint = true; } if (stockConstraintLock.tryLock()) { try { stockConstraint.set(true); // 设置处理中标识为true List<UserPosition> userPositions = userPositionMapper.selectList(new LambdaQueryWrapper<UserPosition>().isNull(UserPosition::getSellOrderId)); if (CollectionUtils.isNotEmpty(userPositions)) { userPositionService.stockConstraint(userPositions); @@ -191,7 +194,7 @@ log.error("强制平仓任务错误:" + e.getMessage()); } finally { stockConstraintLock.unlock(); stockConstraint = false; stockConstraint.set(false); // 设置处理中标识为false } } else { log.info("强制平仓任务--------->上次任务还未执行完成,本次任务忽略");