spring boot+mybatis+quartz项目的搭建
1. 因为这里我们是搭建spring boot+mybatis+quartz架构,故在pom.xml文件中配置相关依赖
<?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"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.hzsun</groupId><artifactId>jobdemo</artifactId><version>0.0.1-SNAPSHOT</version><name>jobdemo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><!--<!– druid数据库连接池 –>--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2. spring boot的理念是做到零配置,所以这里没有web.xml,只有一个application.yml的配置,这个时配置数据源及mybatis的mapper扫描路径
server:port: 8080
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/db_quartz?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTCusername: rootpassword: 1jpa:show-sql: truehibernate:ddl-auto: updatedatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialect
logging:level:root: info
3. Spring boot web是不需要部署在Tomcat下的,因为自带了Tomcat,只需要执行主程序Application的main方法就可以了。但需要做些重要的配置
package org.tompai;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication
@ServletComponentScan
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
这里的配置@SpringBootApplication是默认,注意第二个和第三个配置,如果缺少@MapperScan("com.hq.dispach.dao")配置则会出现dao无法注入到service的情况,如果@EnableAutoConfiguration缺少则会出现quartz任务调度里无法注入service,这里建议不管是什么应用程序都最好加上这个配置。
4 接下来就是control,service,dao,scheduleTask的代码编写了
Control:
package org.tompai.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.tompai.entity.JobEntity;
import org.tompai.service.JobService;import java.util.List;/*** @desc : 任务controller*/
@RestController
@RequestMapping("job/")
public class JobController {@Autowiredprivate JobService jobService;@RequestMapping("list")public List<JobEntity> list(){return jobService.findAll();}@RequestMapping("save")public String save(JobEntity jobEntity){try {jobService.save(jobEntity);return "成功";}catch (Exception e){return "失败";}}
}
Sevice:
package org.tompai.service;import java.util.List;import org.tompai.entity.JobEntity;/*** @desc :*/
public interface JobService {/*** 查询所有* @return 任务列表*/List<JobEntity> findAll();/*** 根据ID查询任务* @param id ID* @return*/JobEntity findById(String id);/*** 重试* @param jobEntity*/void reTry(JobEntity jobEntity);void deleteJob(String id);void save(JobEntity jobEntity);void update(JobEntity jobEntity);
}
Dao:
package org.tompai.dao;import org.springframework.data.jpa.repository.JpaRepository;
import org.tompai.entity.JobEntity;/*** @desc : 任务 仓储*/
public interface JobDao extends JpaRepository<JobEntity,String> {}
ScheduleTask:
package org.tompai.utils;import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.tompai.entity.JobEntity;
import org.tompai.entity.JobLogEntity;
import org.tompai.service.JobLogService;
import org.tompai.service.JobService;import java.util.Date;
import java.util.UUID;/*** 通用任务*/
public class ScheduleJob extends QuartzJobBean {private Logger logger = LoggerFactory.getLogger(getClass());private static JobService jobService;private static JobLogService jobLogService;/*** 获取JobService 对象* @return JobService 对象*/private JobService getJobService(){if (jobService == null){jobService = (JobService) SpringContextUtil.getBean("jobServiceImpl");}return jobService;}/*** 获取日志service bean* @return 日志service*/private JobLogService getJobLogService(){if (jobLogService == null){jobLogService = (JobLogService) SpringContextUtil.getBean("jobLogServiceImpl");}return jobLogService;}@Overrideprotected void executeInternal(JobExecutionContext context) {JobEntity scheduleJob = (JobEntity) context.getMergedJobDataMap().get(JobEntity.JOB_PARAM_KEY);//任务开始时间long startTime = System.currentTimeMillis();JobLogEntity jobLogEntity = new JobLogEntity();jobLogEntity.setId(UUID.randomUUID().toString().replace("-",""));try {//执行任务logger.info("任务准备执行,任务ID:" + scheduleJob.getJobName());JobEntity jobEntity = this.getJobService().findById(scheduleJob.getId());jobLogEntity.setRanTime(new Date(startTime));if (jobEntity == null){//删除quartz 队列中的 任务this.getJobService().deleteJob(scheduleJob.getId());throw new RuntimeException("任务已经被删除");}//任务执行总时长long times = System.currentTimeMillis() - startTime;logger.info("任务执行完毕,任务ID:" + scheduleJob.getJobName() + " 总共耗时:" + times + "毫秒");jobLogEntity.setRanExpend(times);jobLogEntity.setStatus(0);jobLogEntity.setJobId(scheduleJob.getId());jobLogEntity.setRanNum(scheduleJob.getRetriedNum());} catch (Exception e) {logger.error("任务执行失败,任务ID:" + scheduleJob.getJobName(), e);jobLogEntity.setStatus(1);jobLogEntity.setMsg(e.getMessage());//需要重试if (scheduleJob.getRetry() == 1 && scheduleJob.getRestryNum() > scheduleJob.getRetriedNum()){logger.error("任务准备在" + scheduleJob.getRetryInterval() + "秒后重试。任务名:"+ scheduleJob.getJobName());this.getJobService().reTry(scheduleJob);}}finally {this.getJobLogService().save(jobLogEntity);}}
}
Entity:
package org.tompai.entity;import org.hibernate.annotations.Proxy;import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;/*** @desc : 任务实体*/
@Entity
@Proxy(lazy = false)
public class JobEntity implements Serializable {private static final long serialVersionUID = -8680221003366638822L;/*** 任务调度参数key*/public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY";@Idprivate String id;/*** 任务名*/private String jobName;/*** 数据源ID*/private String sourceId;/*** 创建时间*/private Date createTime;/*** 当前状态: 1-正常,2-暂停,3-已删除*/private Integer status;/*** cron 表达式*/private String cronExpression;/*** 失败重试次数*/private int restryNum;/*** 是否失败重试 1-是,0 否*/private Integer retry;/*** 已经重试的次数*/private int retriedNum;/*** 重试间隔时间:单位-秒*/private int retryInterval;/*** 目标库ID*/private String targetId;/*** 重试时间,用于置0已重试次数。*/private Date retryDate;public Date getRetryDate() {return retryDate;}public void setRetryDate(Date retryDate) {this.retryDate = retryDate;}public int getRetryInterval() {return retryInterval;}public void setRetryInterval(int retryInterval) {this.retryInterval = retryInterval;}public String getTargetId() {return targetId;}public void setTargetId(String targetId) {this.targetId = targetId;}public String getJobName() {return jobName;}public void setJobName(String jobName) {this.jobName = jobName;}public String getSourceId() {return sourceId;}public void setSourceId(String sourceId) {this.sourceId = sourceId;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}public String getCronExpression() {return cronExpression;}public void setCronExpression(String cronExpression) {this.cronExpression = cronExpression;}public int getRestryNum() {return restryNum;}public void setRestryNum(int restryNum) {this.restryNum = restryNum;}public Integer getRetry() {return retry;}public void setRetry(Integer retry) {this.retry = retry;}public int getRetriedNum() {return retriedNum;}public void setRetriedNum(int retriedNum) {this.retriedNum = retriedNum;}public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic String toString() {return "JobEntity{" +"id='" + id + '\'' +", jobName='" + jobName + '\'' +", sourceId='" + sourceId + '\'' +", createTime=" + createTime +", status=" + status +", cronExpression='" + cronExpression + '\'' +", restryNum=" + restryNum +", retry=" + retry +", retriedNum=" + retriedNum +", targetId='" + targetId + '\'' +'}';}
}
5. 搭建好后启动application的main方法,通过页面访问control的URL可以获取数据库里的数据,同时quartz的定时任务会按照配置的时间定时执行
spring boot+mybatis+quartz项目的搭建相关推荐
- 商城项目(一)使用Spring boot + Mybatis搭建
Spring boot + Mybatis基础架构 环境搭建 mysql 8 mysql客户端连接工具 Valentina Studio springboot 版本:2.1.3.RELEASE Myb ...
- 【SpringBoot】spring boot + mybatis + druid
0.美图 1.为什么用Druid 因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到 ...
- Maven 搭建spring boot多模块项目(附源码)
Maven 搭建spring boot多模块项目 备注:所有项目都在idea中创建 1.idea创建maven项目 1-1: 删除src,target目录,只保留pom.xml 1-2: 根目录pom ...
- 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建
从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...
- 搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统
搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统 场景 可行性分析 搭建Spring Boot集成 ...
- spring boot+mybatis框架环境搭建
配置spring boot+mybatis框架环境搭建 一, spring boot 环境搭建 以下步骤为 1,新建maven工程 2.在pom文件中添加: spring-boot-starter-p ...
- 优秀的 Spring Boot 语言开源项目
优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等各个方面 Spring Boot 中文索引 项目名称 分布式敏捷开发系统架构 项 ...
- Eclipse + Spring boot +mybatis + mysql
Eclipse + Spring boot +mybatis + mysql 如题.使用Springboot 2.0 版本进行网页的开发.原理和优点很多博文已经讲过了,这里不再赘述.但是很多项目按照他 ...
- spring boot+mybatis整合
LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Sp ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
最新文章
- (Mirage系列之十)Mirage经典案例之系统恢复
- element ui表格点击整行选择_element-ui实现动态表头的表格问题汇总
- SQLite关于时间段查询的sql
- IIS应用池保持激活工具开发
- SAP Fiori应用里一些OData错误排查的最佳实践
- Asprise OCR SDK 15.3试用版破解
- Asp.Net Core 快速邮件队列设计与实现
- Android之基于xmpp openfire smack开发之Android客户端开发[3]
- 浅谈高斯消元的实现和简单应用
- 【常见Web应用安全问题】---1、Cross Site Scripting
- emacs编辑器的使用
- JAVA字符串怎么转换成整数
- 命令关闭手机蓝牙_iPhone手机这些实用的便捷功能,你知道多少?
- T-SQL多个小计+合计,分类汇总
- css radio 垂直居中显示,CSS表单元素垂直居中完美解决方案
- Symbian检测是否有存储卡
- mac虚拟机服务器设置u盘启动不了,mac虚拟机如何使用u盘启动盘
- Pr视频剪辑出现红线
- vue baidu-map百度地图自定义换肤、去掉百度地图logo
- UG NX 12鼠标和键盘操作
热门文章
- Git_Eclipse:[2]Git初始化配置
- Android虚拟键盘上下左右键按下和弹起的响应事件
- 【转】JAVA成长之路
- [原]gcc 中c实现所定义的特征
- ZeroClipboard—ZeroClipboard的使用
- WinForm PictureBox删除图片重新加载,显示System.IO.IOException:文件“**.png”正由另一进程使用,因此该进程无法访问此文件
- Spring Boot项目中使用 TrueLicense 生成和验证License(服务器许可)
- java 常用缓存描述
- prism.js让页面代码变漂亮
- js实现页面滚动,菜单固定