SpringMVC 关联使用 quartz。
// pom.xml
<properties>
<springframework.version>5.1.6.RELEASE</springframework.version>
<quartz.version>2.2.3</quartz.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
<!-- quartz 需要加上 logback 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
// quartz.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 每组配置3个, 1 对 2 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<!-- -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="name" value="j1" />
<property name="group" value="g1" />
<property name="jobClass" value="com.baidu.day.text.job.MyJob1" />
</bean>
<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="name" value="t1" />
<property name="group" value="g1" />
<!-- 每秒触发一次 -->
<property name="cronExpression" value="* * * * * ?" />
<property name="jobDetail" ref="jobDetail" />
</bean>
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<array>
<ref bean="trigger" />
</array>
</property>
</bean>
</beans>
// MyJob1.java
public class MyJob1 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
System.out.println(mergedJobDataMap.get("userServices"));
System.out.println(new Date());
}
}
// Test1.java
public class Test1 {
public static void main(String[] args) throws SchedulerException, InterruptedException {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("quartz.xml");
StdScheduler scheduler = (StdScheduler) applicationContext.getBean("scheduler");
// // 删除工作
// scheduler.deleteJob(JobKey.jobKey("j1", "g1"));
//
// // 暂停工作
// scheduler.pauseJob(JobKey.jobKey("j1", "g1"));
//
// // 重新启动工作
// scheduler.resumeJob(JobKey.jobKey("j1","g1"));
Thread.sleep(3000);
// 批量处理
scheduler.pauseJobs(GroupMatcher.<JobKey>groupEquals("g1") );
}
}
quartz 采用注解。
// quartz.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 每组配置3个, 1 对 2 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 解析注解 -->
<context:component-scan base-package="com.baidu.day.text" ></context:component-scan>
<task:annotation-driven></task:annotation-driven>
</beans>
// 告诉注解解析器解析这个类
@Component
public class MyJob2 {
@Scheduled(cron = "* * * * * ?")
public void hello() {
System.out.println(new Date());
}
}
// Test2.java 测试
public class Test2 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("quartz.xml");
}
}
layui 数据列表功能。
下载 layui 前端框架 (链接,https://www.layui.com)。解压后将 layui 文件夹放入 webapp 下。
// index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
<script src="${pageContext.request.contextPath}/layui/layui.js"></script>
</head>
<body>
<table id="demo" lay-filter="test"></table>
<script>
layui.use('table', function(){
var table = layui.table;
// 为表格填充数据
table.render({
elem: '#demo'
,height: 312
<%--,url: '${pageContext.request.contextPath}/data‘ //获取数据--%>
,url: '/user/all'
,page: true //开启分页
,cols: [[ //表头
{field:'empno', width:80, title: 'ID', sort: true}
,{field:'ename', width:80, title: '用户名'}
,{field:'job', width:80, title: '工作', sort: true}
,{field:'hiredate', title: '日期'} //没定义宽度则占满剩余所有宽度,都不定义则所有列均分
,{field:'sal',width:80, title: '评分', sort: true}
]]
});
});
</script>
</body>
</html>
// ResData.java
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ResData<T> {
private String msg;
private Integer code;
private List<T> data;
private Integer count;
public static ResData success() {
ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
IEmpService empService = (IEmpService)ac.getBean("empService");
List<Emp> all = empService.getAll();
return new ResData("success",0,all, all.size());
}
}
@RestController
@RequestMapping("/user")
public class MyController {
@RequestMapping("/all")
public ResData getAll() {
System.out.println("all");
return ResData.success();
}
}
完善服务端分页功能。
// pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
// application.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 别名 -->
<property name="typeAliasesPackage" value="com.baidu.day.text.entity" />
<!-- 读取 mapper.xml 文件 -->
<property name="mapperLocations" value="classpath*:com/baidu/day/text/mapper/*.xml" />
<!-- 分页 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<!-- 页码合理性 -->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ResData<T> {
private String msg;
private Integer code;
private List<T> data;
private Integer count;
public static ResData success(Integer page, Integer limit) {
ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
IEmpService empService = (IEmpService)ac.getBean("empService");
PageHelper.startPage(page, limit);
List<Emp> all = empService.getAll();
PageInfo<Emp> pageInfo = new PageInfo<>(all);
return new ResData("success",0,all, (int) pageInfo.getTotal());
}
}
@RestController
@RequestMapping("/user")
public class MyController {
@RequestMapping("/all")
public ResData getAll(Integer page, Integer limit) {
System.out.println("all");
return ResData.success(page, limit);
}
}