From 1e60718574050da636c1bef3bd690a6911302148 Mon Sep 17 00:00:00 2001 From: zhangjun <879913833@qq.com> Date: Tue, 27 Sep 2022 15:53:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E5=8A=A8=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search/util/InitStandAttrSearchUtil.java | 2 + .../adc/da/scheduled/ScheduledJobRunner.java | 27 ++++++ .../com/adc/da/search/conf/SchedulerConf.java | 88 +++++++++++++++++++ .../tsTask/controller/TbTaskController.java | 11 +++ .../com/adc/da/slrs/tsTask/entity/TbTask.java | 3 + 5 files changed, 131 insertions(+) create mode 100644 adc-da-slrs/src/main/java/com/adc/da/scheduled/ScheduledJobRunner.java diff --git a/adc-da-search/src/main/java/com/adc/da/search/util/InitStandAttrSearchUtil.java b/adc-da-search/src/main/java/com/adc/da/search/util/InitStandAttrSearchUtil.java index 3caafc2e..c0ee1a8d 100644 --- a/adc-da-search/src/main/java/com/adc/da/search/util/InitStandAttrSearchUtil.java +++ b/adc-da-search/src/main/java/com/adc/da/search/util/InitStandAttrSearchUtil.java @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.math.BigDecimal; @@ -24,6 +25,7 @@ import java.util.Map; */ @Component +@Order(value = 1) public class InitStandAttrSearchUtil implements ApplicationRunner { private static final Logger logger = LoggerFactory.getLogger(InitStandAttrSearchUtil.class); diff --git a/adc-da-slrs/src/main/java/com/adc/da/scheduled/ScheduledJobRunner.java b/adc-da-slrs/src/main/java/com/adc/da/scheduled/ScheduledJobRunner.java new file mode 100644 index 00000000..b707764b --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/scheduled/ScheduledJobRunner.java @@ -0,0 +1,27 @@ +package com.adc.da.scheduled; + + +import com.adc.da.search.conf.SchedulerConf; +import com.adc.da.search.util.InitStandAttrSearchUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +@Component +@Order(value = 2) +public class ScheduledJobRunner implements ApplicationRunner { + + private static final Logger logger = LoggerFactory.getLogger(ScheduledJobRunner.class); + + @Autowired + private SchedulerConf schedulerConf; + + @Override + public void run(ApplicationArguments args) throws Exception { + schedulerConf.startByIp(); + } +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java b/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java index 6b161dcf..6fac8108 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java +++ b/adc-da-slrs/src/main/java/com/adc/da/search/conf/SchedulerConf.java @@ -15,7 +15,12 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; import java.util.Date; +import java.util.Enumeration; import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; @@ -107,6 +112,89 @@ public class SchedulerConf { log.info("{},任务停止...",taskId); } + /** + * 根据ip开启定时任务 + */ + public void startByIp() throws Exception{ +// InetAddress addr = InetAddress.getLocalHost(); +// log.info("Local HostAddress: "+addr.getHostAddress()); +// String hostname = addr.getHostName(); +// log.info("Local host name: "+hostname); + String addr = getIpAddress(); + log.info("本机ip地址:" + addr); + //查询 + List tbTaskList = tbTaskDao.selectList(null); + for (TbTask tbTask : tbTaskList) { + if (addr.equals(tbTask.getIp())) { + this.start(tbTask.getId()); + log.info("执行了:"+tbTask.getTaskDesc()); + } + } + } + + private static String getIpAddress(){ + try{ + Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); + while (allNetInterfaces.hasMoreElements()){ + NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement(); + Enumeration addresses = netInterface.getInetAddresses(); + while (addresses.hasMoreElements()){ + InetAddress ip = (InetAddress) addresses.nextElement(); + if (ip != null + && ip instanceof Inet4Address + && !ip.isLoopbackAddress() //loopback地址即本机地址,IPv4的loopback范围是127.0.0.0 ~ 127.255.255.255 + && ip.getHostAddress().indexOf(":")==-1){ + System.out.println("本机的IP = " + ip.getHostAddress()); + return ip.getHostAddress(); + } + } + } + }catch(Exception e){ + e.printStackTrace(); + } + return null; + } + /** 获取主机地址 */ + public static String getHostIp(){ + + String realIp = null; + + try { + InetAddress address = InetAddress.getLocalHost(); + + // 如果是回环网卡地址, 则获取ipv4 地址 + if (address.isLoopbackAddress()) { + address = getInet4Address(); + } + + realIp = address.getHostAddress(); + + log.info("获取主机ip地址成功, 主机ip地址:{}", address); + return address.getHostAddress(); + } catch (Exception e) { + log.error("获取主机ip地址异常", e); + } + + return realIp; + } + + /** 获取IPV4网络配置 */ + private static InetAddress getInet4Address() throws SocketException { + // 获取所有网卡信息 + Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); + while (networkInterfaces.hasMoreElements()) { + NetworkInterface netInterface = (NetworkInterface) networkInterfaces.nextElement(); + Enumeration addresses = netInterface.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress ip = (InetAddress) addresses.nextElement(); + if (ip instanceof Inet4Address) { + return ip; + } + } + } + return null; + } + /** * 更新数据库动态定时任务状态 */ diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/controller/TbTaskController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/controller/TbTaskController.java index ac5138bc..cd31f36c 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/controller/TbTaskController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/controller/TbTaskController.java @@ -12,6 +12,7 @@ import io.swagger.annotations.Api; import com.adc.da.base.web.BaseController; import java.lang.reflect.Field; +import java.net.InetAddress; import java.util.ArrayList; import java.util.List; @@ -54,6 +55,16 @@ public class TbTaskController extends BaseController { return "操作成功"; } + /** + * 根据ip开启定时任务 + * http://localhost:10085/tbTask + */ + @GetMapping("startByIp/{taskId}") + public String startByIp() throws Exception{ + schedulerConf.startByIp(); + return "操作成功"; + } + /** * 更新一个动态定时任务 * http://localhost:10085/tbTask/save?taskId=2&taskExp=0/2 * * * * ?&taskClass=cn.huanzi.qch.springboottimer.task.MyRunnable3 diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/entity/TbTask.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/entity/TbTask.java index fcd393de..5da780f7 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/entity/TbTask.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/tsTask/entity/TbTask.java @@ -45,6 +45,9 @@ public class TbTask extends BaseEntity { @ApiModelProperty(value = "定时任务状态,0停用 1启用") private Integer taskStatus; + @ApiModelProperty(value = "ip地址") + private String ip; + @ApiModelProperty(value = "定时任务的Runnable任务类完整路径") private String taskClass;