初次提交
This commit is contained in:
3
xxl-job/danji.Dockerfile
Normal file
3
xxl-job/danji.Dockerfile
Normal file
@ -0,0 +1,3 @@
|
||||
FROM jenkins/jenkins
|
||||
ADD target/xxl-job.jar /xxl-job.jar
|
||||
ENTRYPOINT ["java","-jar","/xxl-job.jar","--spring.profiles.active=danji","-c"]
|
||||
3
xxl-job/open.Dockerfile
Normal file
3
xxl-job/open.Dockerfile
Normal file
@ -0,0 +1,3 @@
|
||||
FROM jenkins/jenkins
|
||||
ADD target/xxl-job.jar /xxl-job.jar
|
||||
ENTRYPOINT ["java","-jar","/xxl-job.jar","--spring.profiles.active=open","-c"]
|
||||
76
xxl-job/pom.xml
Normal file
76
xxl-job/pom.xml
Normal file
@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>ho-cloud</artifactId>
|
||||
<groupId>com.hoenergy</groupId>
|
||||
<version>1.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>xxl-job</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<common-tools.version>1.0</common-tools.version>
|
||||
<business-service-api.version>1.0</business-service-api.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<!-- xxl-job-core -->
|
||||
<dependency>
|
||||
<groupId>com.xuxueli</groupId>
|
||||
<artifactId>xxl-job-core</artifactId>
|
||||
</dependency>
|
||||
<!--工具类-->
|
||||
<dependency>
|
||||
<groupId>com.hoenergy</groupId>
|
||||
<artifactId>common-tools</artifactId>
|
||||
<version>${common-tools.version}</version>
|
||||
</dependency>
|
||||
<!--business-service-api-->
|
||||
<dependency>
|
||||
<groupId>com.hoenergy</groupId>
|
||||
<artifactId>business-service-api</artifactId>
|
||||
<version>${business-service-api.version}</version>
|
||||
</dependency>
|
||||
<!--OpenFeign-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||
</dependency>
|
||||
<!-- starter-web:spring-webmvc + autoconfigure + logback + yaml + tomcat -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<!--SpringCloud ailibaba nacos -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<defaultGoal>compile</defaultGoal>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>2.2.12.RELEASE</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<skipTests>true</skipTests>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
234
xxl-job/src/main/java/com/ho/xxljob/JobHandler.java
Normal file
234
xxl-job/src/main/java/com/ho/xxljob/JobHandler.java
Normal file
@ -0,0 +1,234 @@
|
||||
package com.ho.xxljob;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.ho.business.vo.req.MonitorQuery;
|
||||
import com.ho.common.tools.service.RedisService;
|
||||
import com.ho.common.tools.util.RedisCommon;
|
||||
import com.ho.xxljob.feignclient.BusinessFeignClient;
|
||||
import com.ho.xxljob.feignclient.FileFeignClient;
|
||||
import com.ho.xxljob.feignclient.FlowFeignClient;
|
||||
import com.ho.xxljob.handlers.TimeGenerateService;
|
||||
import com.xxl.job.core.biz.model.ReturnT;
|
||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||
import com.xxl.job.core.log.XxlJobLogger;
|
||||
import com.xxl.job.core.util.DateUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author fancl
|
||||
* @desc: 执行器:所有执行任务都是以Bean的方式定义
|
||||
* @date 2022/10/19
|
||||
*/
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class JobHandler {
|
||||
|
||||
@Autowired
|
||||
RedisCommon redisUtil;
|
||||
|
||||
@Autowired
|
||||
TimeGenerateService timeGenerateService;
|
||||
|
||||
@Autowired
|
||||
BusinessFeignClient businessFeignClient;
|
||||
|
||||
@Autowired
|
||||
FlowFeignClient flowFeignClient;
|
||||
|
||||
@Autowired
|
||||
FileFeignClient fileFeignClient;
|
||||
|
||||
@Autowired
|
||||
RedisService redisService;
|
||||
|
||||
/**
|
||||
* 生成监控页面需要的时间缓存数据(Redis)
|
||||
*/
|
||||
@XxlJob("generateMonitorRedisTimeHandler")
|
||||
public ReturnT<String> generateMonitorRedisTimeHandler(String param) throws Exception {
|
||||
XxlJobLogger.log("generateMonitorRedisTimeHandler ");
|
||||
log.info("generateMonitorRedisTimeHandler start !");
|
||||
timeGenerateService.buildTimeMinutes();
|
||||
timeGenerateService.buildTimeDays();
|
||||
//每年的各个月
|
||||
timeGenerateService.buildYearMonth();
|
||||
log.info("generateMonitorRedisTimeHandler end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
//光伏逆变器每15分钟根据发电量 和 电价表 产生的收益,入库到income_total表
|
||||
@XxlJob("jobIntervalGene4RealTimeDataBySrc")
|
||||
public ReturnT<String> jobIntervalGene4RealTimeDataBySrc(String param) throws Exception {
|
||||
XxlJobLogger.log("jobIntervalGene4RealTimeDataBySrc ");
|
||||
log.info("jobIntervalGeneAndProfitByDay start !");
|
||||
businessFeignClient.intervalGene4RealTimeDataBySrc();
|
||||
log.info("jobIntervalGeneAndProfitByDay end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时检测电站的接入点是否在线或离线()
|
||||
*/
|
||||
@XxlJob("accessPointEvent")
|
||||
public ReturnT<String> accessPointEvent(String param) throws Exception {
|
||||
XxlJobLogger.log("accessPointEvent ");
|
||||
log.info("accessPointEvent start !");
|
||||
flowFeignClient.accessPointEvent();
|
||||
log.info("accessPointEvent end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时删除多余的图片及文件数据
|
||||
*/
|
||||
@XxlJob("deletedPicture")
|
||||
public ReturnT<String> deletedPicture(String param) throws Exception {
|
||||
XxlJobLogger.log("deletedPicture ");
|
||||
log.info("deletedPicture start !");
|
||||
flowFeignClient.deletedPicture();
|
||||
businessFeignClient.deletedPicture();
|
||||
log.info("deletedPicture end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 加工一体柜 充电量,放电量,当月充电量,当月放电量
|
||||
* 暂时用不到
|
||||
*/
|
||||
@XxlJob("jobIntegratedCabinet")
|
||||
public ReturnT<String> jobIntegratedCabinet(String param) throws Exception {
|
||||
XxlJobLogger.log("jobIntegratedCabinet,param: {} ", param);
|
||||
//参数转换为MonitorQuery对象
|
||||
MonitorQuery monitorQuery = new MonitorQuery();
|
||||
if (!StringUtils.isEmpty(param)) {
|
||||
monitorQuery = JSONObject.parseObject(param, MonitorQuery.class);
|
||||
}
|
||||
log.info("jobIntegratedCabinet start !");
|
||||
//建议改成异步调用,这个方法会比较耗时
|
||||
businessFeignClient.jobIntegratedCabinet(monitorQuery);
|
||||
log.info("jobIntegratedCabinet end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 加工一体柜 充电量,放电量,当月充电量,当月放电量(小时)
|
||||
* 暂时用不到
|
||||
*/
|
||||
@XxlJob("jobIntegratedCabinetHour")
|
||||
public ReturnT<String> jobIntegratedCabinetHour(String param) throws Exception {
|
||||
XxlJobLogger.log("jobIntegratedCabinetHour,param: {} ", param);
|
||||
//参数转换为MonitorQuery对象
|
||||
MonitorQuery monitorQuery = new MonitorQuery();
|
||||
if (!StringUtils.isEmpty(param)) {
|
||||
monitorQuery = JSONObject.parseObject(param, MonitorQuery.class);
|
||||
}
|
||||
log.info("jobIntegratedCabinetHour start !");
|
||||
//建议改成异步调用,这个方法会比较耗时
|
||||
businessFeignClient.jobIntegratedCabinetHour(monitorQuery);
|
||||
log.info("jobIntegratedCabinetHour end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每天加工天气数据
|
||||
* 暂时用不到
|
||||
*/
|
||||
@XxlJob("jobStationWeathers")
|
||||
public ReturnT<String> jobStationWeathers(String param) throws Exception {
|
||||
XxlJobLogger.log("jobStationWeathers,param: {} ", param);
|
||||
log.info("jobStationWeathers start !");
|
||||
//建议改成异步调用,这个方法会比较耗时
|
||||
fileFeignClient.jobStationWeathers();
|
||||
log.info("jobStationWeathers end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 收益统计定时任务
|
||||
*/
|
||||
@XxlJob("jobIncomeDataManage")
|
||||
public ReturnT<String> jobIncomeDataManage(String param) throws Exception {
|
||||
XxlJobLogger.log("jobIncomeDataManage ");
|
||||
log.info("jobIncomeDataManage start !");
|
||||
businessFeignClient.jobIncomeDataManage();
|
||||
log.info("jobIncomeDataManage end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
@XxlJob("jobEarningsCalculate")
|
||||
public ReturnT<String> jobEarningsCalculate(String param) {
|
||||
XxlJobLogger.log("jobEarningsCalculate");
|
||||
log.info("jobMaintenanceInsert start !");
|
||||
Date date = DateUtil.addDays(new Date(), -1);
|
||||
businessFeignClient.jobEarningsCalculate(DateUtil.formatDate(date));
|
||||
log.info("jobMaintenanceInsert end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算收益(当日)
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@XxlJob("jobEarningsCalculateHour")
|
||||
public ReturnT<String> jobEarningsCalculateHour(String param) {
|
||||
XxlJobLogger.log("jobEarningsCalculateHour");
|
||||
log.info("jobEarningsCalculateHour start !");
|
||||
businessFeignClient.jobEarningsCalculate(DateUtil.formatDate(new Date()));
|
||||
log.info("jobEarningsCalculateHour end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
@XxlJob("regularlySendNotifications")
|
||||
public ReturnT<String> regularlySendNotifications(String param) {
|
||||
XxlJobLogger.log("regularlySendNotifications,param: {} ", param);
|
||||
//参数转换为MonitorQuery对象
|
||||
MonitorQuery monitorQuery = new MonitorQuery();
|
||||
if (!StringUtils.isEmpty(param)) {
|
||||
monitorQuery = JSONObject.parseObject(param, MonitorQuery.class);
|
||||
}
|
||||
log.info("regularlySendNotifications start !");
|
||||
flowFeignClient.regularlySendNotifications(monitorQuery);
|
||||
log.info("regularlySendNotifications end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@XxlJob("jobFreezeMonthTotalEle")
|
||||
public ReturnT<String> jobFreezeMonthTotalEle(String param) {
|
||||
XxlJobLogger.log("jobEarningsCalculate");
|
||||
log.info("jobMaintenanceInsert start !");
|
||||
businessFeignClient.jobFreezeMonthTotalEle();
|
||||
log.info("jobMaintenanceInsert end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
//定时获取每个电站的日充日放
|
||||
@XxlJob("jobGetDayDate")
|
||||
public ReturnT<String> jobGetDayDate(String param) {
|
||||
XxlJobLogger.log("jobGetDayDate");
|
||||
log.info("jobGetDayDate start !");
|
||||
businessFeignClient.jobGetDayDate();
|
||||
log.info("jobGetDayDate end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时任务,根据时间刷新消息广播发送状态及阅读状态
|
||||
* @return
|
||||
*/
|
||||
@XxlJob("jobUpdateMessageInfo")
|
||||
public ReturnT<String> jobUpdateMessageInfo(String param){
|
||||
log.info("jobUpdateMessageInfo start !");
|
||||
businessFeignClient.jobUpdateMessageInfo();
|
||||
log.info("jobUpdateMessageInfo end !");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
}
|
||||
20
xxl-job/src/main/java/com/ho/xxljob/XxlJobApplication.java
Normal file
20
xxl-job/src/main/java/com/ho/xxljob/XxlJobApplication.java
Normal file
@ -0,0 +1,20 @@
|
||||
package com.ho.xxljob;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
|
||||
/**
|
||||
* 业务中心启动类
|
||||
*/
|
||||
@SpringBootApplication(scanBasePackages = {"com.ho.common", "com.ho.xxljob"},
|
||||
exclude = DataSourceAutoConfiguration.class)
|
||||
@EnableDiscoveryClient
|
||||
@EnableFeignClients(basePackages = {"com.ho.xxljob.feignclient"})
|
||||
public class XxlJobApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(XxlJobApplication.class, args);
|
||||
}
|
||||
}
|
||||
63
xxl-job/src/main/java/com/ho/xxljob/config/XxlJobConfig.java
Normal file
63
xxl-job/src/main/java/com/ho/xxljob/config/XxlJobConfig.java
Normal file
@ -0,0 +1,63 @@
|
||||
package com.ho.xxljob.config;
|
||||
|
||||
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author fancl
|
||||
* @desc: Job配置
|
||||
* @date 2022/10/19
|
||||
*/
|
||||
|
||||
@Configuration
|
||||
@Slf4j
|
||||
@Getter
|
||||
@Setter
|
||||
public class XxlJobConfig {
|
||||
|
||||
|
||||
@Value("${xxl.job.admin.addresses}")
|
||||
private String adminAddresses;
|
||||
|
||||
@Value("${xxl.job.accessToken}")
|
||||
private String accessToken;
|
||||
|
||||
@Value("${xxl.job.executor.appname}")
|
||||
private String appname;
|
||||
|
||||
@Value("${xxl.job.executor.address}")
|
||||
private String address;
|
||||
|
||||
@Value("${xxl.job.executor.ip}")
|
||||
private String ip;
|
||||
|
||||
@Value("${xxl.job.executor.port}")
|
||||
private int port;
|
||||
|
||||
@Value("${xxl.job.executor.logpath}")
|
||||
private String logPath;
|
||||
|
||||
@Value("${xxl.job.executor.logretentiondays}")
|
||||
private int logRetentionDays;
|
||||
|
||||
@Bean
|
||||
public XxlJobSpringExecutor xxlJobExecutor() {
|
||||
log.info(">>>>>>>>>>> xxl-job config init.");
|
||||
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
|
||||
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
|
||||
xxlJobSpringExecutor.setAppname(appname);
|
||||
xxlJobSpringExecutor.setAddress(address);
|
||||
xxlJobSpringExecutor.setIp(ip);
|
||||
xxlJobSpringExecutor.setPort(port);
|
||||
xxlJobSpringExecutor.setAccessToken(accessToken);
|
||||
xxlJobSpringExecutor.setLogPath(logPath);
|
||||
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
|
||||
return xxlJobSpringExecutor;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,70 @@
|
||||
package com.ho.xxljob.feignclient;
|
||||
|
||||
import com.ho.business.vo.req.MonitorQuery;
|
||||
import com.ho.common.tools.constant.ContextConstant;
|
||||
import com.ho.common.tools.exception.DataResult;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
|
||||
@FeignClient(value = ContextConstant.BUSINESS_SERVICE, fallback = BusinessFeignClientFallback.class)
|
||||
public interface BusinessFeignClient {
|
||||
|
||||
// 加工一体柜充电量,放电量(小时)
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "outerApi/jobIntegratedCabinetHour")
|
||||
DataResult jobIntegratedCabinetHour(@RequestBody MonitorQuery monitorQuery);
|
||||
|
||||
|
||||
// 加工一体柜充电量,放电量
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "outerApi/jobIntegratedCabinet")
|
||||
DataResult jobIntegratedCabinet(@RequestBody MonitorQuery monitorQuery);
|
||||
|
||||
//每天站级天气定时任务
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.MEDIA_CONTEXT + "weather/jobStationWeathers")
|
||||
DataResult jobStationWeathers();
|
||||
|
||||
/* 15分钟收益数据 */
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "income/jobDataManage")
|
||||
DataResult intervalGene4RealTimeDataBySrc();
|
||||
|
||||
//删除图片及文件数据
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "outerApi/deletedPicture")
|
||||
void deletedPicture();
|
||||
|
||||
//删除图片及文件数据
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "cockpit/revenueStatisticsJob")
|
||||
void revenueStatisticsJob();
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "openStation/jobDataManage")
|
||||
void jobIncomeDataManage();
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "outerApi/jobStationState")
|
||||
void jobStationState();
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "stationMaintenance/maintenanceInsert")
|
||||
void jobMaintenanceInsert();
|
||||
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "earningsCalculate/all")
|
||||
void jobEarningsCalculate(@RequestBody String dateTime);
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "earningsCalculate/freezeMonthTotalEle")
|
||||
void jobFreezeMonthTotalEle();
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "outerApi/jobGetDayDate")
|
||||
void jobGetDayDate();
|
||||
|
||||
/**
|
||||
* 定时计算效率
|
||||
*/
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "outerApi/jobGetSystemEfficiency")
|
||||
void jobGetSystemEfficiency();
|
||||
|
||||
/**
|
||||
* 定时刷新消息广播
|
||||
*/
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.BUSINESS + "messageInfo/jobUpdateMessageInfo")
|
||||
void jobUpdateMessageInfo();
|
||||
|
||||
}
|
||||
@ -0,0 +1,102 @@
|
||||
package com.ho.xxljob.feignclient;
|
||||
|
||||
import com.ho.business.vo.req.MonitorQuery;
|
||||
import com.ho.common.tools.exception.BaseResponseCode;
|
||||
import com.ho.common.tools.exception.BusinessException;
|
||||
import com.ho.common.tools.exception.DataResult;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
@Component
|
||||
public class BusinessFeignClientFallback implements BusinessFeignClient {
|
||||
|
||||
Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@Override
|
||||
public DataResult jobIntegratedCabinetHour(MonitorQuery monitorQuery) {
|
||||
log.error("BusinessFeignClient.jobIntegratedCabinetHour error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult jobIntegratedCabinet(MonitorQuery monitorQuery) {
|
||||
log.error("BusinessFeignClient.jobIntegratedCabinet error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult jobStationWeathers() {
|
||||
log.error("BusinessFeignClient.jobStationWeathers error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult intervalGene4RealTimeDataBySrc() {
|
||||
log.error("BusinessFeignClient.intervalGene4RealTimeDataBySrc error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deletedPicture() {
|
||||
log.error("BusinessFeignClient.deletedPicture error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void revenueStatisticsJob() {
|
||||
log.error("BusinessFeignClient.revenueStatisticsJob error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobIncomeDataManage() {
|
||||
log.error("BusinessFeignClient.jobIncomeDataManage error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobStationState() {
|
||||
log.error("BusinessFeignClient.jobStationState error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobMaintenanceInsert() {
|
||||
log.error("BusinessFeignClient.jobMaintenanceInsert error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobEarningsCalculate(String dateTime) {
|
||||
log.error("BusinessFeignClient.jobEarningsCalculate error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobFreezeMonthTotalEle() {
|
||||
log.error("BusinessFeignClient.jobFreezeMonthTotalEle error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobGetDayDate() {
|
||||
log.error("BusinessFeignClient.jobGetDayDate error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobGetSystemEfficiency() {
|
||||
log.error("BusinessFeignClient.jobGetSystemEfficiency error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jobUpdateMessageInfo() {
|
||||
log.error("BusinessFeignClient.jobUpdateMessageInfo error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package com.ho.xxljob.feignclient;
|
||||
|
||||
import com.ho.common.tools.constant.ContextConstant;
|
||||
import com.ho.common.tools.exception.DataResult;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
|
||||
/**
|
||||
* @Description flow模块的远程调用
|
||||
* Author yule
|
||||
* Date 2023/3/17 10:20
|
||||
*/
|
||||
@FeignClient(value = ContextConstant.FILE_CENTER, fallback = FileFeignClientFallback.class)
|
||||
public interface FileFeignClient {
|
||||
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.MEDIA_CONTEXT + "weather/jobStationWeathers")
|
||||
DataResult jobStationWeathers();
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
package com.ho.xxljob.feignclient;
|
||||
|
||||
import com.ho.common.tools.exception.BaseResponseCode;
|
||||
import com.ho.common.tools.exception.BusinessException;
|
||||
import com.ho.common.tools.exception.DataResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author fancl
|
||||
* @desc:
|
||||
* @date 2023/5/16
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class FileFeignClientFallback implements FileFeignClient{
|
||||
|
||||
@Override
|
||||
public DataResult jobStationWeathers() {
|
||||
log.error("FileFeignClientFallback.jobStationWeathers error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
package com.ho.xxljob.feignclient;
|
||||
|
||||
import com.ho.business.vo.req.MonitorQuery;
|
||||
import com.ho.common.tools.constant.ContextConstant;
|
||||
import com.ho.common.tools.exception.DataResult;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
/**
|
||||
* @Description flow模块的远程调用
|
||||
* Author yule
|
||||
* Date 2023/3/17 10:20
|
||||
*/
|
||||
@FeignClient(value = ContextConstant.FLOW_CENTER, fallback = FlowFeignClientFallback.class)
|
||||
public interface FlowFeignClient {
|
||||
|
||||
//判断电站接入点状态
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.FLOW_CONTEXT + "outerApi/accessPointEvent")
|
||||
void accessPointEvent();
|
||||
//删除图片及文件数据
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.FLOW_CONTEXT + "outerApi/deletedPicture")
|
||||
void deletedPicture();
|
||||
|
||||
//判断告警类型为告警等级(等级为3)定时发生短信任务
|
||||
@PostMapping(value = ContextConstant.ROOT_CONTEXT + ContextConstant.FLOW_CONTEXT + "outerApi/regularlySendNotifications")
|
||||
void regularlySendNotifications(@RequestBody MonitorQuery monitorQuery);
|
||||
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package com.ho.xxljob.feignclient;
|
||||
|
||||
import com.ho.business.vo.req.MonitorQuery;
|
||||
import com.ho.common.tools.constant.ContextConstant;
|
||||
import com.ho.common.tools.exception.BaseResponseCode;
|
||||
import com.ho.common.tools.exception.BusinessException;
|
||||
import com.ho.common.tools.exception.DataResult;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
|
||||
/**
|
||||
* @Description flow模块远程调用失败策略
|
||||
* Author yule
|
||||
* Date 2023/3/17 10:22
|
||||
*/
|
||||
|
||||
@Component
|
||||
public class FlowFeignClientFallback implements FlowFeignClient{
|
||||
Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@Override
|
||||
public void accessPointEvent() {
|
||||
log.error(" FlowFeignClient.accessPointEvent error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deletedPicture() {
|
||||
log.error(" FlowFeignClient.deletedPicture error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void regularlySendNotifications(MonitorQuery monitorQuery) {
|
||||
log.error(" FlowFeignClient.deletedPicture error!");
|
||||
throw new BusinessException(BaseResponseCode.FEIGN_CALL_FAIL);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
package com.ho.xxljob.handlers;
|
||||
|
||||
import com.ho.common.tools.constant.RedisKeyConstant;
|
||||
import com.ho.common.tools.util.RedisCommon;
|
||||
import com.ho.xxljob.util.TimeConvertUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fancl
|
||||
* @desc: 时间生成处理器
|
||||
* @date 2022/10/19
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class TimeGenerateService {
|
||||
|
||||
@Autowired
|
||||
RedisCommon redisUtil;
|
||||
|
||||
//按分钟的时间间隔
|
||||
public void buildTimeMinutes() {
|
||||
Date date = new Date();
|
||||
//建立5分钟间隔数据
|
||||
List<String> fiveMinutesList = new ArrayList<>(300);
|
||||
List<String> OneMinutesList = new ArrayList<>(1440);
|
||||
List<String> sixtyMinutesList = new ArrayList<>(24);
|
||||
List<String> thirtyMinutesList = new ArrayList<>(48);
|
||||
fiveMinutesList = TimeConvertUtil.minute(date, 5);
|
||||
OneMinutesList = TimeConvertUtil.minute(date, 1);
|
||||
thirtyMinutesList = TimeConvertUtil.minute(date,30);
|
||||
sixtyMinutesList = TimeConvertUtil.minute2(date, 60);
|
||||
redisUtil.set(RedisKeyConstant.FIVE_MINUTE_INTERVAL, fiveMinutesList);
|
||||
redisUtil.set(RedisKeyConstant.ONE_MINUTE_INTERVAL, OneMinutesList);
|
||||
redisUtil.set(RedisKeyConstant.SIXTY_MINUTE_INTERVAL,sixtyMinutesList);
|
||||
redisUtil.set(RedisKeyConstant.THIRTY_MINUTE_INTERVAL,thirtyMinutesList);
|
||||
}
|
||||
|
||||
//每月每天的数据 yyyy-MM-dd
|
||||
public void buildTimeDays() {
|
||||
Date date = new Date();
|
||||
List<String> currentMonthList = new ArrayList<>(TimeConvertUtil.getCurrentMonthLastDay());
|
||||
currentMonthList = TimeConvertUtil.day(date, 1);
|
||||
redisUtil.set(RedisKeyConstant.ONE_DAY_INTERVAL,currentMonthList);
|
||||
}
|
||||
|
||||
//每年每月数据 yyyy-MM
|
||||
public void buildYearMonth(){
|
||||
//每年每月
|
||||
Date dateMonth = new Date();
|
||||
List<String> currentYearMonthList = new ArrayList<>(20);
|
||||
currentYearMonthList = TimeConvertUtil.month(dateMonth, 1);
|
||||
redisUtil.set(RedisKeyConstant.MONTH_INTERVAL,currentYearMonthList);
|
||||
}
|
||||
}
|
||||
122
xxl-job/src/main/java/com/ho/xxljob/util/TimeConvertUtil.java
Normal file
122
xxl-job/src/main/java/com/ho/xxljob/util/TimeConvertUtil.java
Normal file
@ -0,0 +1,122 @@
|
||||
package com.ho.xxljob.util;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author fancl
|
||||
* @desc: 时间转换
|
||||
* @date 2022/10/19
|
||||
*/
|
||||
|
||||
public class TimeConvertUtil {
|
||||
|
||||
//时间字符串格式(以分钟为单位)
|
||||
public static List<String> minute(Date date, int offset) {
|
||||
Date start = dayStartDate(date);//转换为天的起始date
|
||||
Date nextDayDate = nextDay(start);//下一天的date
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
||||
List<String> result = new ArrayList<>(720);
|
||||
while (start.compareTo(nextDayDate) < 0) {
|
||||
result.add(sdf.format(start));
|
||||
//日期加5分钟
|
||||
start = addMinutes(start, offset);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<String> minute2(Date date, int offset) {
|
||||
Date start = dayStartDate(date);//转换为天的起始date
|
||||
Date nextDayDate = nextDay(start);//下一天的date
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
List<String> result = new ArrayList<>(20);
|
||||
while (start.compareTo(nextDayDate) < 0) {
|
||||
result.add(sdf.format(start));
|
||||
//日期加5分钟
|
||||
start = addMinutes(start, offset);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//以天为单位
|
||||
public static List<String> day(Date date, int offset) {
|
||||
Date start = DateUtil.beginOfMonth(date);//转换为天的起始date
|
||||
Date nextDayDate = DateUtil.endOfMonth(date);//下一天的date
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
List<String> result = new ArrayList<>(getCurrentMonthLastDay());
|
||||
while (start.compareTo(nextDayDate) < 0) {
|
||||
result.add(sdf.format(start));
|
||||
//日期加一天
|
||||
start = addDays(start, offset);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//以月为单位
|
||||
public static List<String> month(Date date, int offset) {
|
||||
Date start = DateUtil.beginOfYear(date);//转换为天的起始date
|
||||
Date nextDayDate = DateUtil.endOfYear(date);//下一天的date
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
||||
List<String> result = new ArrayList<>(20);
|
||||
while (start.compareTo(nextDayDate) < 0) {
|
||||
result.add(sdf.format(start));
|
||||
//加一个月
|
||||
start = addMonth(start, offset);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//增加时间间隔
|
||||
public static Date addMinutes(Date start, int offset) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(start);
|
||||
c.add(Calendar.MINUTE, offset);
|
||||
return c.getTime();
|
||||
}
|
||||
public static Date addDays(Date start, int offset) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(start);
|
||||
c.add(Calendar.DAY_OF_MONTH, offset);
|
||||
return c.getTime();
|
||||
}
|
||||
|
||||
private static Date addMonth(Date start, int offset) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(start);
|
||||
c.add(Calendar.MONTH, offset);
|
||||
return c.getTime();
|
||||
}
|
||||
|
||||
public static Date nextDay(Date start) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(start);
|
||||
c.add(Calendar.DATE, 1);
|
||||
return c.getTime();
|
||||
}
|
||||
|
||||
public static Date dayStartDate(Date date) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
c.set(Calendar.HOUR_OF_DAY, 0);
|
||||
c.set(Calendar.MINUTE, 0);
|
||||
c.set(Calendar.SECOND, 0);
|
||||
c.set(Calendar.MILLISECOND, 0);
|
||||
return c.getTime();
|
||||
}
|
||||
|
||||
public static int getCurrentMonthLastDay()
|
||||
{
|
||||
Calendar a = Calendar.getInstance();
|
||||
a.set(Calendar.DATE, 1);//把日期设置为当月第一天
|
||||
a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
|
||||
int maxDate = a.get(Calendar.DATE);
|
||||
return maxDate;
|
||||
}
|
||||
}
|
||||
50
xxl-job/src/main/resources/application-dev.yml
Normal file
50
xxl-job/src/main/resources/application-dev.yml
Normal file
@ -0,0 +1,50 @@
|
||||
server:
|
||||
port: 8016
|
||||
|
||||
spring:
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
application:
|
||||
name: xxl-job
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 127.0.0.1:8848
|
||||
#Redis
|
||||
redis:
|
||||
port: 6379 #端口
|
||||
timeout: 3000ms #连接超时
|
||||
host: 1.95.153.121 #单机
|
||||
password: zzkj@688737
|
||||
database: 0
|
||||
|
||||
#port: 6379 #端口
|
||||
#timeout: 5000ms #连接超时
|
||||
#host: 127.0.0.1 #单机
|
||||
#password:
|
||||
#database: 0
|
||||
#集群 真实环境开启
|
||||
# record:
|
||||
# nodes:
|
||||
# - 127.0.0.1:6379
|
||||
# - 127.0.0.1:6380
|
||||
# - 127.0.0.1:6381
|
||||
lettuce:
|
||||
pool:
|
||||
max-active: 8 #连接池最大连接 默认8
|
||||
max-idle: 8 #连接池中最大空闲连接 默认8
|
||||
min-idle: 1 #连接池中最小空闲连接 默认0
|
||||
max-wait: 2000ms #连接池最大阻塞等待时间 使用负值表示没有限制
|
||||
xxl:
|
||||
job:
|
||||
admin:
|
||||
addresses: http://127.0.0.1:8015/job-admin
|
||||
accessToken:
|
||||
executor:
|
||||
appname: job-executor-sample
|
||||
address:
|
||||
ip: 127.0.0.1
|
||||
port: 9999
|
||||
logpath: /home/hocloud/logs/xxl-job/
|
||||
logretentiondays: 30
|
||||
|
||||
11
xxl-job/src/main/resources/application.yml
Normal file
11
xxl-job/src/main/resources/application.yml
Normal file
@ -0,0 +1,11 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: dev
|
||||
messages:
|
||||
basename: i18n/messages
|
||||
encoding: utf-8
|
||||
|
||||
#ribbon的超时时间
|
||||
ribbon:
|
||||
ReadTimeout: 20000
|
||||
ConnectTimeout: 20000
|
||||
71
xxl-job/src/main/resources/logback.xml
Normal file
71
xxl-job/src/main/resources/logback.xml
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE xml>
|
||||
<configuration>
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS,CTT} [%thread] %-5level %logger{36} - %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>/home/hocloud/logs/xxl-job/xxl-job.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>/home/hocloud/logs/xxl-job/xxl-job.%d{yyyy-MM-dd}-%i.log
|
||||
</fileNamePattern>
|
||||
<!--180天-->
|
||||
<maxHistory>10</maxHistory>
|
||||
<!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
|
||||
命名日志文件,例如log-error-2013-12-21.0.log -->
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>256MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS,CTT} [%thread] %-5level %logger{36} - %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!--Error级别-->
|
||||
<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>/home/hocloud/logs/xxl-job/xxl-job-error.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>/home/hocloud/logs/xxl-job/xxl-job-error.%d{yyyy-MM-dd}-%i.log
|
||||
</fileNamePattern>
|
||||
<!--180天-->
|
||||
<maxHistory>10</maxHistory>
|
||||
<!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
|
||||
命名日志文件,例如log-error-2013-12-21.0.log -->
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>256MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
<!-- 此filter过滤debug级别以下的日志-->
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>ERROR</level>
|
||||
</filter>
|
||||
<!-- 级别过滤器,根据日志级别进行过滤。-->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- project default level -->
|
||||
<logger name="com.ho.business" level="DEBUG"/>
|
||||
|
||||
<!--log4jdbc -->
|
||||
<logger name="jdbc.sqltiming" level="DEBUG"/>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="console"/>
|
||||
<appender-ref ref="rollingFile"/>
|
||||
<appender-ref ref="errorFile"/>
|
||||
</root>
|
||||
</configuration>
|
||||
8
xxl-job/src/test/java/MonitorTest.java
Normal file
8
xxl-job/src/test/java/MonitorTest.java
Normal file
@ -0,0 +1,8 @@
|
||||
/**
|
||||
* @author fancl
|
||||
* @desc:
|
||||
* @date 2023/12/18
|
||||
*/
|
||||
public class MonitorTest {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user