| | |
| | | private CurrencySerivceImpl currencyService; |
| | | |
| | | @Autowired |
| | | private ConfigurableApplicationContext context; |
| | | |
| | | @Autowired |
| | | @Qualifier("threadPoolTaskExecutor") |
| | | private ThreadPoolTaskExecutor threadPoolTaskExecutor; |
| | | |
| | | @Bean |
| | | public void mexcWebsocketRunClientMap() { |
| | | List<Currency> mexc = currencyService.list(new LambdaQueryWrapper<Currency>().eq(Currency::getSource, "mexc")); |
| | | public void mexcWebsocketRunClientMap() throws InterruptedException { |
| | | List<Currency> mexc = currencyService.list(new LambdaQueryWrapper<Currency>().eq(Currency::getSource, "mexc").eq(Currency::getBaseAsset,"USBT")); |
| | | if (!CollectionUtils.isEmpty(mexc)) { |
| | | int batchSize = 30; // 每个线程处理的数据量 |
| | | int totalSize = mexc.size(); |
| | | int threadCount = (int) Math.ceil((double) totalSize / batchSize); // 计算需要的线程数 |
| | | |
| | | int count = 0; |
| | | for (int i = 0; i < threadCount; i++) { |
| | | int fromIndex = i * batchSize; |
| | | int toIndex = Math.min(fromIndex + batchSize, totalSize); |
| | | List<Currency> sublist = mexc.subList(fromIndex, toIndex); |
| | | |
| | | count++; |
| | | if(count % 15 == 0 && count != 0){ |
| | | count = 0; |
| | | Thread.sleep(1500); |
| | | } |
| | | // 使用自定义线程池提交任务 |
| | | threadPoolTaskExecutor.execute(() -> { |
| | | try { |
| | | new MexcClient(sublist).start(); |
| | | } catch (Exception e) { |
| | | run(); |
| | | } |
| | | new MexcClient(sublist).start(); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | private boolean runExecuted = false; |
| | | private synchronized void run() { |
| | | |
| | | if (runExecuted) { |
| | | return; // 已经执行过,直接返回 |
| | | } |
| | | runExecuted = true; |
| | | log.info("ws 异常开始重启"); |
| | | Thread restartThread = new Thread(() -> { |
| | | try { |
| | | SpringApplication.exit(context, () -> 0); |
| | | SpringApplication.run(MexcClientApplication.class); |
| | | log.info("ws 重启成功"); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("ws 重启失败"); |
| | | } |
| | | }); |
| | | restartThread.setDaemon(false); |
| | | restartThread.start(); |
| | | log.info("ws 重启失败"); |
| | | } |
| | | } |
| | | |