Commit 18598f33 authored by 谢恒's avatar 谢恒

Merge branch 'xh-dev' into 'dev'

HSCLOUD_CLIENT

See merge request hscloud/hscloudagent-console!4
parents c2ebe0d0 67ccdee9
......@@ -26,12 +26,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
......@@ -52,6 +46,35 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
......
Manifest-Version: 1.0
Main-Class: com.hs.admin.AdminApplication
package com.hs.admin.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DataBase {
//数据库ip
private String host;
//数据库端口号
private String port;
//数据库表名
private String name;
//数据库用户名
private String username;
//数据库密码
private String password;
//数据库类型,1mysql,2sqlserver,3oracle
private String dbType;
//数据库驱动
private String dbDriver;
private String url;
}
package com.hs.admin.bean;
import lombok.Data;
@Data
public class MqData {
private String jcbId;
private String jobName;
private Integer type;
private String content;
private String url;
private String guid;
}
package com.hs.admin.bean;
import lombok.Data;
@Data
public class Student {
private Integer iIden;
private Integer iClassId;
private String sName;
private Integer iAge;
}
package com.hs.admin.config;
import com.hs.admin.factory.JobFactory;
import org.quartz.Scheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import java.io.IOException;
import java.util.Properties;
/**
* @author xieheng
*/
@Configuration
public class QuartzConfigration {
private static final Logger LOGGER = LoggerFactory.getLogger(QuartzConfigration.class);
@Autowired
JobFactory jobFactory;
/**
* @description: 配置bean
* @return: SchedulerFactoryBean
* @author: XieHeng
* @date: 2021/4/27 2:04 下午
*/
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
try {
schedulerFactoryBean.setOverwriteExistingJobs(true);
schedulerFactoryBean.setQuartzProperties(getQuartzProperties());
schedulerFactoryBean.setJobFactory(jobFactory);
} catch (Exception e) {
LOGGER.error(">>>QuartzConfigration配置失败:" + e);
}
return schedulerFactoryBean;
}
/**
* @description: 指定配置文件,在配置文件中配置相关属性(quartz.properties在resource根目录下)
* @return: Properties
* @author: XieHeng
* @date: 2021/4/27 2:05 下午
*/
private Properties getQuartzProperties() {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
ClassPathResource resource = new ClassPathResource("/quartz.properties");
Properties properties = null;
propertiesFactoryBean.setLocation(resource);
try {
propertiesFactoryBean.afterPropertiesSet();
properties = propertiesFactoryBean.getObject();
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
/**
* @description: 获取scheduler
* @return: Scheduler
* @author: XieHeng
* @date: 2021/4/27 2:12 下午
*/
@Bean(name = "scheduler")
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
package com.hs.admin.dao;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.SysTask;
import java.util.HashMap;
......@@ -8,16 +9,9 @@ import java.util.List;
import java.util.Map;
public interface SysTaskDao {
int deleteByPrimaryKey(Integer id);
int insert(SysTask record);
int insertSelective(SysTask record);
SysTask selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(SysTask record);
int updateByPrimaryKey(SysTask record);
int delTask(Integer taskId);
......@@ -27,4 +21,16 @@ public interface SysTaskDao {
int delTaskById(Integer id);
Long getTotalCount(HashMap<String, Object> map);
SysTask findTaskByJobName(String jobName);
int updateMqContent(SysTask sysTask);
int update(SysTask task);
List<SysTask> getTaskList();
int delete(SysTask task);
DataBase getDbInfo(String jcbId);
}
\ No newline at end of file
package com.hs.admin.factory;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
/**
* @author xieheng
*/
@Component
public class JobFactory extends AdaptableJobFactory {
@Autowired
AutowireCapableBeanFactory autowireCapableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
//将任务自动注入到factory
autowireCapableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
package com.hs.admin.job;
import com.hs.admin.bean.DataBase;
import com.hs.admin.bean.MqData;
import com.hs.admin.bean.Student;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.util.DynamicDataBaseUtil;
import com.hs.admin.util.JsonUtils;
import com.zaxxer.hikari.HikariDataSource;
import org.quartz.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
@DisallowConcurrentExecution
@Component
public class TestJob implements Job {
@Resource
RabbitTemplate rabbitTemplate;
@Resource
SysTaskDao sysTaskDao;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
System.out.println(JsonUtils.beanToJson(jobDataMap));
String triggerTask = jobDataMap.get("triggerTask").toString();
SysTask sysTask = JsonUtils.jsonToBean(triggerTask, SysTask.class);
MqData mqData = JsonUtils.jsonToBean(sysTask.getContent(), MqData.class);
String guid = mqData.getGuid();
String jcbId = mqData.getJcbId();
String url = mqData.getUrl();
Integer type = mqData.getType();
String jobName = mqData.getJobName();
String content = mqData.getContent();
//根据jcbId选择db操作todo
DataBase dataBase = getDataBaseInfo(jcbId);
HikariDataSource dataSource = null;
try {
dataSource = DynamicDataBaseUtil.configure(dataBase);
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
List<Student> students = jdbcTemplate.query(content, new BeanPropertyRowMapper<>(Student.class));
System.out.println(">>>>>>>>>>>" + JsonUtils.beanToJson(students));
if (!CollectionUtils.isEmpty(students)) {
for (Student student : students) {
//将db返回结果发送消息队列
// rabbitTemplate.convertAndSend(RabbitMqConfig.ITEM_TOPIC_EXCHANGE,"",j);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//每次用完记得关闭连接
dataSource.close();
}
//
// String content = "00...........这是另一个定时任务!" + LocalDateTime.now();
// System.out.println("00...........这是另一个定时任务!" + LocalDateTime.now());
// String path = "/Users/macbookpro/Documents/";
// String date = LocalDate.now().toString();
// String className = this.getClass().getSimpleName();
// path = path + date;
// File file = new File(path);
// if (!file.exists()) {
// file.mkdirs();
// }
// String fileName = path + "/" + className + ".txt";
// FileUtil.writeFile(fileName, content);
}
/**
* @description: 读取本地配置文件
* @param: jcbId
* @return: DataBase
* @author: XieHeng
* @date: 2021/5/7 4:11 下午
*/
private DataBase readProperties(String jcbId) {
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("dbconfig/db.properties");
Properties properties = new Properties();
try {
properties.load(inputStream);
String host = properties.getProperty(jcbId + "_db_host");
String port = properties.getProperty(jcbId + "_db_port");
String username = properties.getProperty(jcbId + "_db_username");
String password = properties.getProperty(jcbId + "_db_password");
String dbName = properties.getProperty(jcbId + "_db_name");
String type = properties.getProperty(jcbId + "_db_type");
String driver = "";
String url = "";
switch (type) {
//1sqlserver,2mysql,3oracle
case "1":
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
url = "jdbc:sqlserver://" + host + ":" + port + ";DatabaseName=" + dbName;
break;
case "2":
driver = "com.mysql.cj.jdbc.Driver";
url = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
break;
case "3":
driver = "oracle.jdbc.OracleDriver";
url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbName;
break;
default:
break;
}
return new DataBase(host, port, dbName, username, password, type, driver, url);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private DataBase getDataBaseInfo(String jcbId) {
DataBase dataBase = sysTaskDao.getDbInfo(jcbId);
String type = dataBase.getDbType();
String host = dataBase.getHost();
String dbName = dataBase.getName();
String port = dataBase.getPort();
String driver = null;
String url = null;
switch (type) {
//1sqlserver,2mysql,3oracle
case "1":
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
url = "jdbc:sqlserver://" + host + ":" + port + ";DatabaseName=" + dbName;
break;
case "2":
driver = "com.mysql.cj.jdbc.Driver";
url = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
break;
case "3":
driver = "oracle.jdbc.OracleDriver";
url = "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dbName;
break;
default:
break;
}
dataBase.setDbDriver(driver);
dataBase.setUrl(url);
return dataBase;
}
}
package com.hs.admin.listener;
import com.hs.admin.bean.MqData;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.service.SchedulerJobService;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
@Component
public class RabbitMqListener {
@Resource
SysTaskDao sysTaskDao;
@Resource
SchedulerJobService schedulerJobService;
/**
* @description: 消费端消费
* @param: data
* @return: void
* @author: XieHeng
* @date: 2021/5/7 1:41 下午
*/
// @RabbitListener(queues = "item_queue")
public synchronized void mqTest(String data) {
LogUtil.info(">>>>>进入消费,data=:" + data);
MqData mqData = JsonUtils.jsonToBean(data, MqData.class);
if (ObjectUtils.isEmpty(mqData)) {
LogUtil.error(">>>>>>item_queue消息消费内容为空");
return;
}
String jobName = mqData.getJobName();
SysTask sysTask = sysTaskDao.findTaskByJobName(jobName);
sysTask.setContent(JsonUtils.beanToJson(mqData));
int i = sysTaskDao.updateMqContent(sysTask);
if (i == 1) {
schedulerJobService.deleteJob(sysTask);
schedulerJobService.initJob(sysTask);
}
System.out.println(">>>>>消费成功结束");
}
}
package com.hs.admin.listener;
import com.hs.admin.service.SchedulerJobService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author xieheng
*/
@Component
public class SchedulerJobListener implements CommandLineRunner {
private static final Logger LOGGER = LoggerFactory.getLogger(SchedulerJobListener.class);
@Resource
SchedulerJobService schedulerJobService;
@Override
public void run(String... args) {
try {
schedulerJobService.initJobList();
} catch (Exception e) {
LOGGER.error(">>>SchedulerJobListener error :" + e);
}
}
}
package com.hs.admin.service;
import com.hs.admin.bean.SysTask;
/**
* @author xieheng
*/
public interface JobManagerService {
boolean addJob(SysTask task);
boolean pauseJob(SysTask task);
boolean resumeJob(SysTask task);
boolean deleteJob(SysTask task);
boolean runJobNow(SysTask task);
boolean updateJobCron(SysTask task);
}
package com.hs.admin.service;
import com.hs.admin.bean.SysTask;
/**
* @author xieheng
*/
public interface SchedulerJobService {
boolean initJob(SysTask sysTask);
boolean runNow(SysTask sysTask);
boolean parseJob(SysTask sysTask);
boolean resumeJob(SysTask sysTask);
boolean initJobList();
boolean deleteJob(SysTask sysTask);
boolean editCron(SysTask task, String cron);
}
package com.hs.admin.service.impl;
import com.hs.admin.bean.SysTask;
import com.hs.admin.service.JobManagerService;
import com.hs.admin.util.JsonUtils;
import org.quartz.*;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.net.URL;
/**
* @author xieheng
*/
@Service
public class JobManagerServiceImpl implements JobManagerService {
@Resource
Scheduler scheduler;
/**
* 添加任务
*
* @return
*/
@SuppressWarnings("unchecked")
@Override
public boolean addJob(SysTask task) {
try {
// 创建jobDetail实例,绑定Job实现类
// 指明job的名称,所在组的名称,以及绑定job类
Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(task.getBeanClass()).newInstance().getClass());
// 任务名称和组构成任务key
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(task.getJobName(), task.getJobGroup()).build();
// 定义调度触发规则
// 使用cornTrigger规则
// 触发器key
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(task.getJobName(), task.getJobGroup())
.startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND))
.withSchedule(CronScheduleBuilder.cronSchedule(task.getCronExpression())).startNow().build();
trigger.getJobDataMap().put("triggerTask", JsonUtils.beanToJson(task));
// 把作业和触发器注册到任务调度中
Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
if (triggerState.equals(Trigger.TriggerState.NONE)) {
scheduler.scheduleJob(jobDetail, trigger);
// 启动
if (!scheduler.isShutdown()) {
scheduler.start();
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* @description: 暂停任务
* @return: void
* @author: XieHeng
* @date: 2021/4/27 5:35 下午
*/
@Override
public boolean pauseJob(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
try {
scheduler.pauseJob(jobKey);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
}
return false;
}
/**
* @description: 恢复任务
* @return: void
* @author: XieHeng
* @date: 2021/4/27 5:35 下午
*/
@Override
public boolean resumeJob(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
try {
scheduler.resumeJob(jobKey);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
}
return false;
}
/**
* @description: 删除任务
* @return: void
* @author: XieHeng
* @date: 2021/4/27 5:35 下午
*/
@Override
public boolean deleteJob(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
try {
scheduler.deleteJob(jobKey);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
}
return false;
}
/**
* @description: 立马执行任务
* @return: void
* @author: XieHeng
* @date: 2021/4/27 5:35 下午
*/
@Override
public boolean runJobNow(SysTask task) {
JobKey jobKey = JobKey.jobKey(task.getJobName(), task.getJobGroup());
try {
scheduler.triggerJob(jobKey);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
}
return false;
}
/**
* @description: 更新cron表达式
* @return: void
* @author: XieHeng
* @date: 2021/4/27 5:36 下午
*/
@Override
public boolean updateJobCron(SysTask task) {
TriggerKey triggerKey = TriggerKey.triggerKey(task.getJobName(), task.getJobGroup());
try {
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(task.getCronExpression());
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
scheduler.rescheduleJob(triggerKey, trigger);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
URL url = Thread.currentThread().getContextClassLoader().getResource("TestJob");
System.out.println(url.toString());
}
}
package com.hs.admin.service.impl;
import com.hs.admin.base.CodeMessageEnum;
import com.hs.admin.base.HsRuntimeException;
import com.hs.admin.base.JobStateEnum;
import com.hs.admin.bean.SysTask;
import com.hs.admin.dao.SysTaskDao;
import com.hs.admin.service.JobManagerService;
import com.hs.admin.service.SchedulerJobService;
import com.hs.admin.util.JsonUtils;
import com.hs.admin.util.LogUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.List;
/**
* @author xieheng
*/
@Service
public class SchedulerJobServiceImpl implements SchedulerJobService {
@Resource
JobManagerService jobManagerService;
@Resource
SysTaskDao sysTaskDao;
/**
* @description: 校验任务id
* @param: taskId
* @param: request
* @return: void
* @author: XieHeng
* @date: 2021/5/6 11:03 上午
*/
private void checkId(Long taskId, String prefix) {
if (taskId < 1) {
LogUtil.error(prefix + "参数错误:taskId=" + taskId);
throw new HsRuntimeException(CodeMessageEnum.REQUEST_ERROR.getCode(), CodeMessageEnum.REQUEST_ERROR.getMsg());
}
}
@Override
public boolean initJob(SysTask task) {
return excuteInitJobOperate(task);
}
/**
* @description: 立即执行,只运行一次
* @param: sysTask
* @return: boolean
* @author: XieHeng
* @date: 2021/5/7 2:56 下午
*/
@Override
public boolean runNow(SysTask sysTask) {
return jobManagerService.runJobNow(sysTask);
}
private boolean excuteInitJobOperate(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
boolean b = jobManagerService.addJob(task);
if (b) {
task.setJobStatus(JobStateEnum.NORMAL.getCode());
return sysTaskDao.update(task) == 1;
}
} else {
LogUtil.error("初始化定时任务失败");
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return false;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean parseJob(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
boolean b = jobManagerService.pauseJob(task);
if (b) {
task.setJobStatus(JobStateEnum.PAUSED.getCode());
return sysTaskDao.update(task) == 1;
}
} else {
LogUtil.error("暂停任务失败:" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return false;
}
@Override
public boolean resumeJob(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
boolean b = jobManagerService.resumeJob(task);
if (b) {
task.setJobStatus(JobStateEnum.NORMAL.getCode());
return sysTaskDao.update(task) == 1;
}
} else {
LogUtil.error("恢复任务失败" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return false;
}
@Override
public boolean initJobList() {
//从库里查询所有待执行任务
List<SysTask> taskList = sysTaskDao.getTaskList();
if (!CollectionUtils.isEmpty(taskList)) {
for (SysTask task : taskList) {
excuteInitJobOperate(task);
}
} else {
LogUtil.error("initJobList error: 没有待执行任务");
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
return true;
}
@Override
public boolean deleteJob(SysTask task) {
if (!ObjectUtils.isEmpty(task)) {
jobManagerService.deleteJob(task);
return sysTaskDao.delete(task) == 1;
} else {
LogUtil.error("删除任务失败" + JsonUtils.beanToJson(task));
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getCode(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
}
@Override
public boolean editCron(SysTask task, String cron) {
if (ObjectUtils.isEmpty(task)) {
throw new HsRuntimeException(CodeMessageEnum.RECORDS_NOT_EXIST.getMsg(), CodeMessageEnum.RECORDS_NOT_EXIST.getMsg());
}
task.setCronExpression(cron);
jobManagerService.updateJobCron(task);
sysTaskDao.updateByPrimaryKey(task);
jobManagerService.runJobNow(task);
return true;
}
}
package com.hs.admin.util;
import com.hs.admin.bean.DataBase;
import com.zaxxer.hikari.HikariDataSource;
public class DynamicDataBaseUtil {
/**
* @description: 配置数据库
* @return: HikariDataSource
* @author: XieHeng
* @date: 2021/5/7 5:02 下午
*/
public static HikariDataSource configure(DataBase dataBase) {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(dataBase.getUrl());
dataSource.setUsername(dataBase.getUsername());
dataSource.setPassword(dataBase.getPassword());
dataSource.setDriverClassName(dataBase.getDbDriver());
dataSource.setMaximumPoolSize(2);
dataSource.setMinimumIdle(1);
dataSource.setAutoCommit(true);
// dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL");
dataSource.addDataSourceProperty("cachePrepStmts", "true");
dataSource.addDataSourceProperty("prepStmtCacheSize", "250");
dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
return dataSource;
}
}
......@@ -18,12 +18,6 @@
id, jcb_id, job_name, content, cron_expression, bean_class, job_status, job_group,
create_time, update_time, `type`
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from sys_task
where id = #{id,jdbcType=INTEGER}
</select>
<select id="findAllByCondition" resultType="java.util.Map">
select st.jcb_id jcbId,
......@@ -50,11 +44,7 @@
where st.jcb_id = #{jcbId}
and st.job_status != 3
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete
from sys_task
where id = #{id,jdbcType=INTEGER}
</delete>
<update id="delTaskById">
update sys_task
set job_status=3
......@@ -65,133 +55,65 @@
set job_status=3
where id = #{taskId}
</update>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.hs.admin.bean.SysTask"
useGeneratedKeys="true">
insert into sys_task (jcb_id, job_name, content,
cron_expression, bean_class, job_status,
job_group, create_time, update_time,
`type`)
values (#{jcbId,jdbcType=VARCHAR}, #{jobName,jdbcType=VARCHAR}, #{content,jdbcType=VARCHAR},
#{cronExpression,jdbcType=VARCHAR}, #{beanClass,jdbcType=VARCHAR}, #{jobStatus,jdbcType=BOOLEAN},
#{jobGroup,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},
#{type,jdbcType=BOOLEAN})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.hs.admin.bean.SysTask"
useGeneratedKeys="true">
insert into sys_task
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="jcbId != null">
jcb_id,
</if>
<if test="jobName != null">
job_name,
</if>
<if test="content != null">
content,
</if>
<if test="cronExpression != null">
cron_expression,
</if>
<if test="beanClass != null">
bean_class,
</if>
<if test="jobStatus != null">
job_status,
</if>
<if test="jobGroup != null">
job_group,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="type != null">
`type`,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="jcbId != null">
#{jcbId,jdbcType=VARCHAR},
</if>
<if test="jobName != null">
#{jobName,jdbcType=VARCHAR},
</if>
<if test="content != null">
#{content,jdbcType=VARCHAR},
</if>
<if test="cronExpression != null">
#{cronExpression,jdbcType=VARCHAR},
</if>
<if test="beanClass != null">
#{beanClass,jdbcType=VARCHAR},
</if>
<if test="jobStatus != null">
#{jobStatus,jdbcType=BOOLEAN},
</if>
<if test="jobGroup != null">
#{jobGroup,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="type != null">
#{type,jdbcType=BOOLEAN},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.hs.admin.bean.SysTask">
update sys_task
<set>
<if test="jcbId != null">
jcb_id = #{jcbId,jdbcType=VARCHAR},
</if>
<if test="jobName != null">
job_name = #{jobName,jdbcType=VARCHAR},
</if>
<if test="content != null">
content = #{content,jdbcType=VARCHAR},
</if>
<if test="cronExpression != null">
cron_expression = #{cronExpression,jdbcType=VARCHAR},
</if>
<if test="beanClass != null">
bean_class = #{beanClass,jdbcType=VARCHAR},
</if>
<if test="jobStatus != null">
job_status = #{jobStatus,jdbcType=BOOLEAN},
</if>
<if test="jobGroup != null">
job_group = #{jobGroup,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="type != null">
`type` = #{type,jdbcType=BOOLEAN},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.hs.admin.bean.SysTask">
update sys_task
set jcb_id = #{jcbId,jdbcType=VARCHAR},
job_name = #{jobName,jdbcType=VARCHAR},
content = #{content,jdbcType=VARCHAR},
cron_expression = #{cronExpression,jdbcType=VARCHAR},
bean_class = #{beanClass,jdbcType=VARCHAR},
job_status = #{jobStatus,jdbcType=BOOLEAN},
job_group = #{jobGroup,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP},
`type` = #{type,jdbcType=BOOLEAN}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="getTaskList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from sys_task where job_status !=3
</select>
<select id="findTaskByJobName" resultMap="BaseResultMap">
select<include refid="Base_Column_List"/>from sys_task where job_name=#{jobName} limit 1
</select>
<select id="getDbInfo" resultType="com.hs.admin.bean.DataBase">
select db_name name,
db_pwd password,
db_username username,
host,
port,
type dbType
from jcb
where jcb_id = #{jcbId}
and state = 1
limit 1
</select>
<update id="updateMqContent">
update sys_task
set content=#{content}
where id = #{id}
</update>
<update id="delete">
update sys_task
set job_status=3
where id = #{id}
</update>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.hs.admin.bean.SysTask"
useGeneratedKeys="true">
insert into sys_task (job_name, content, cron_expression,
bean_class, job_status, job_group,
create_time,
update_time)
values (#{jobName,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{cronExpression,jdbcType=VARCHAR},
#{beanClass,jdbcType=VARCHAR}, #{jobStatus,jdbcType=VARCHAR}, #{jobGroup,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
</insert>
<update id="updateByPrimaryKey" >
update sys_task
set job_name = #{jobName,jdbcType=VARCHAR},
content = #{description,jdbcType=VARCHAR},
cron_expression = #{cronExpression,jdbcType=VARCHAR},
bean_class = #{beanClass,jdbcType=VARCHAR},
job_status = #{jobStatus,jdbcType=INTEGER},
job_group = #{jobGroup,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
<update id="update">
UPDATE sys_task
SET job_status=#{jobStatus}
where id = #{id}
</update>
</mapper>
\ No newline at end of file
#----------------------------------------基础配置------------------------------------------------------------
org.quartz.scheduler.instanceName=QuartzScheduler
# 定时任务实例的id 默认自动
org.quartz.scheduler.instanceId=AUTO
# 是否是集群的任务
#org.quartz.jobStore.isClustered=true
#--------------------------------------------------------------------------------------------------------
#----------------------------------------集成数据库置------------------------------------------------------------
# 定时任务的表前缀
#org.quartz.jobStore.tablePrefix=QRTZ_
# 使用数据库存储JOB数据
#org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore
#org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# 保证待执行的任务是锁定的,持有锁超时,数据库会自动释放
#org.quartz.jobStore.acquireTriggersWithinLock=true
# 检查集群的状态间隔
#org.quartz.jobStore.clusterCheckinInterval=5000
# 如果当前的执行周期被错过 任务持有的时长超过此时长则认为任务过期,单位ms
#org.quartz.jobStore.misfireThreshold=6000
# 事务的隔离级别 推荐使用默认级别 设置为true容易造成死锁和不可重复读的一些事务问题
#org.quartz.jobStore.txIsolationLevelSerializable=false
#----------------------------------------------------------------------------------------------------
#----------------------------------------线程池配置------------------------------------------------------------
#可参考:https://www.w3cschool.cn/quartz_doc/quartz_doc-7vix2d9n.html
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
# 最多有10个定时任务同时执行
org.quartz.threadPool.threadCount=10
# 自创建父线程
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
#----------------------------------------------------------------------------------------------------
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment