效果:每天执行两个定时器,两个定时器不相关联。jar版本Quartz 2.2.3

Java工程结构图  jar 包下载: 链接: https://pan.baidu.com/s/1-7dh620k9PnwAbfKW7Mdiw 提取码: i25t

jingPhone.java

public class jingPhone {

private String phoneid;
private String biddersPrice;
private String yuqiprice;
private String second_kill;
public jingPhone(){}
public jingPhone(String phoneid,String biddersPrice,String yuqiprice,String second_kill){
this.phoneid = phoneid;
this.biddersPrice = biddersPrice;
this.yuqiprice = yuqiprice;
this.second_kill = second_kill;
}
public String getPhoneid() {
return phoneid;
}
public void setPhoneid(String phoneid) {
this.phoneid = phoneid;
}
public String getBiddersPrice() {
return biddersPrice;
}
public void setBiddersPrice(String biddersPrice) {
this.biddersPrice = biddersPrice;
}
public String getYuqiprice() {
return yuqiprice;
}
public void setYuqiprice(String yuqiprice) {
this.yuqiprice = yuqiprice;
}
public String getSecond_kill() {
return second_kill;
}
public void setSecond_kill(String second_kill) {
this.second_kill = second_kill;
}
}

Contants.java

public class Contants {
public static final String driver="com.mysql.jdbc.Driver";//加载JDBC驱动
public static final String url="jdbc:mysql://192.168.1.3:3306/suyou";//mysql的url
public static final String username="root";//用户名
public static final String password="123456";//密码
}

DBConn.java

import java.sql.*;

public class DBConn {
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
/**
* 连接数据库
* @return
*/
public static Connection getConnection() {
try {
Class.forName(Contants.driver); //加载mysql驱动
System.out.println(Contants.driver + "\n加载成功!");
} catch (ClassNotFoundException e) {
System.out.println(Contants.driver + "加载失败(╯﹏╰)b");
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(Contants.url, Contants.username, Contants.password); //连接数据库
System.out.println(Contants.url + "\n连接成功!");
} catch (SQLException e) {
System.out.println(Contants.url + "连接失败(╯﹏╰)b");
e.printStackTrace();
}
return conn;
}

/**
* 关闭数据库连接
* @throws SQLException
*/
public static void closeConnection() {
if(ps != null) {
try {
System.out.println("关闭ps");
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} //关闭数据库
}
if(rs != null) {
try {
System.out.println("关闭rs");
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
System.out.println("关闭conn");
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

DBUnit.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.suyou.bean.jingPhone;

public class DBUnit {
/**
* 竞拍到竞拍完成系列
*/
//得到竞拍成功的商品
private static final String getjingpaibooleanUser = "select phone_id as phoneid,bidders_price as biddersPrice,second_yuqi_price as yuqiprice,second_kill from phone_show where second_boolean = '1' and cunzai = '1' and bidders_price>=second_yuqi_price ";
//修改竞拍人员里面的,竞拍成功
private static final String updatejingpaiUsersuccess = "update phone_jing_pai set jboolean = '1' , agreetime = NOW() where jboolean = '0' and phone_id = ? and price = ? ";
//修改竞拍人员里面的,竞拍失败
private static final String updatejingpaiUserfail = "update phone_jing_pai set jboolean = '2' , agreetime = NOW() where jboolean = '0' ";
//得到竞拍商品1修改为商品展示竞拍结束的商品,未成功下架
private static final String updatejingboolean = "update phone_show set cunzai='3' where second_boolean = '1' and cunzai = '1' ";
/**
* 竞拍完成到竞拍系列
*/
//竞拍完成后展示商品结束
private static final String updatejingbooleanthree = "update phone_show set cunzai='0' where second_boolean = '1' and cunzai = '3' ";
/**
* 得到竞拍成功的商品
* @return
*/
public static List<jingPhone> getjingUser(Connection conn){
PreparedStatement ps = null;
ResultSet rs = null;
List<jingPhone> stu = new ArrayList<jingPhone>();
try{
ps = conn.prepareStatement(getjingpaibooleanUser);
rs = ps.executeQuery();
while(rs.next()) {
String phoneid = rs.getString("phoneid");
String biddersPrice = rs.getString("biddersPrice");
String yuqiprice = rs.getString("yuqiprice");
String second_kill = rs.getString("second_kill");
jingPhone jp =new jingPhone(phoneid,biddersPrice,yuqiprice,second_kill);
stu.add(jp);
}
}catch(Exception e){e.printStackTrace();}finally{
if(rs != null) {
try {
System.out.println("关闭rs");
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null) {
try {
System.out.println("关闭ps");
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return stu;
}
/**
* 修改信息,竞拍成功
*/
public static void updatejingUsersuccess(jingPhone jp,Connection conn) throws SQLException {
PreparedStatement ps = null;
try{
ps = conn.prepareStatement(updatejingpaiUsersuccess);
ps.setString(1, jp.getPhoneid());
ps.setString(2, jp.getBiddersPrice());
int count = ps.executeUpdate();
System.out.println(isSuccess(count));
}catch(Exception e) {e.printStackTrace();}finally{
if(ps != null) {
try {
System.out.println("关闭ps");
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 修改信息,竞拍失败
*/
public static void updatejingUserfail(Connection conn) throws SQLException {
PreparedStatement ps = null;
try{
ps = conn.prepareStatement(updatejingpaiUserfail);
int count = ps.executeUpdate();
System.out.println(isSuccess(count));
}catch(Exception e) {e.printStackTrace();}finally{
if(ps != null) {
try {
System.out.println("关闭ps");
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 修改商品cunzai 属性 竞拍商品都设置为3(表示待展示,商品竞拍完成)
* @throws SQLException
*/
public static void updatejingboolean(Connection conn) throws SQLException{
PreparedStatement ps = null;
try{
ps = conn.prepareStatement(updatejingboolean);
int count = ps.executeUpdate();
System.out.println(isSuccess(count));
}catch(Exception e) {e.printStackTrace();}finally{
if(ps != null) {
try {
System.out.println("关闭ps");
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 修改商品cunzai 属性 竞拍商品都设置为0(表示竞拍成功后,商品展示完成,进入下一轮竞拍)
* @param conn
*/
public static void updatejingbooleanthree(Connection conn){
PreparedStatement ps = null;
try{
ps = conn.prepareStatement(updatejingbooleanthree);
int count = ps.executeUpdate();
System.out.println(isSuccess(count));
}catch(Exception e) {e.printStackTrace();}finally{
if(ps != null) {
try {
System.out.println("关闭ps");
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 判断操作是否成功
* @param count
* @return
*/
public static String isSuccess(int count) {
if(count > 0) {
return "修改操作成功!";
}else {
return "操作失败";
}
}
}

QuartzManager.java  //这个我是借用别人的,增删改方法都有在这里:  https://blog.csdn.net/xlxxcc/article/details/52115995

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

/**
* 来源: https://blog.csdn.net/xlxxcc/article/details/52115995
* @author
*
*/
public class QuartzManager {

private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();

/**
* @Description: 添加一个定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param jobClass 任务
* @param cron 时间设置,参考quartz说明文档
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void addJob(String jobName, String jobGroupName,
String triggerName, String triggerGroupName, Class jobClass, String cron) {
try {
Scheduler sched = schedulerFactory.getScheduler();
// 任务名,任务组,任务执行类
JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
// 触发器
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
// 触发器名,触发器组
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();
// 触发器时间设定
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
// 创建Trigger对象
CronTrigger trigger = (CronTrigger) triggerBuilder.build();
// 调度容器设置JobDetail和Trigger
sched.scheduleJob(jobDetail, trigger);
// 启动
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

PhoneAM.java

import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.suyou.mysql.DBConn;
import com.suyou.mysql.DBUnit;
public class PhoneAM implements Job{//必须继承Job
//全局变量时间
private static Date day = null;
//全局变量时间转化之后的字符串格式
private static String dateNowStr = null;

/**
* 上午执行的函数
*/
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
/**
* 执行任务开始
*/
//获取当前开始时间
day = new Date();
//转换格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//进行转换
dateNowStr = sdf.format(day);
//打印到控制台
System.out.println("当前开始时间:"+dateNowStr);
//初始化数据库链接
Connection conn = null;
//得到数据库链接,在执行SQL语句之后不关闭,执行完了才关闭
conn = DBConn.getConnection();
//SQL语句操作
DBUnit.updatejingbooleanthree(conn);
//关闭数据库所有链接,这里只关闭conn 链接,其他的已经在执行sql语句之后就关闭相应的链接了
DBConn.closeConnection();
//获取当前结束时间
day = new Date();
//转换格式
dateNowStr = sdf.format(day);
//打印到控制台
System.out.println("当前结束时间:"+dateNowStr);
/**
* 执行任务结束
*/
}
}

PhonePM.java

import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.suyou.bean.jingPhone;
import com.suyou.mysql.DBConn;
import com.suyou.mysql.DBUnit;

public class PhonePM implements Job{

private static Date day = null;
private static String dateNowStr = null;
/**
* 下午执行的函数
*/
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
/**
* 执行任务开始
*/
//获取当前开始时间
day = new Date();
//转换格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//进行转换
dateNowStr = sdf.format(day);
//打印到控制台
System.out.println("当前开始时间:"+dateNowStr);
//初始化数据库链接
Connection conn = null;
//得到数据库链接,在执行SQL语句之后不关闭,执行完了才关闭
conn = DBConn.getConnection();
//获取查询出来的对象集合
List<jingPhone> list = DBUnit.getjingUser(conn);
try {
for( int i = 0 ; i < list.size() ; i++) {//内部不锁定,效率最高,但在多线程要考虑并发操作的问题。
//对每一个对象集合执行相应的操作
DBUnit.updatejingUsersuccess(list.get(i),conn);
}
//SQL语句操作
DBUnit.updatejingUserfail(conn);
//SQL语句操作
DBUnit.updatejingboolean(conn);
//关闭数据库所有链接,这里只关闭conn 链接,其他的已经在执行sql语句之后就关闭相应的链接了
DBConn.closeConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取当前结束时间
day = new Date();
//转换格式
dateNowStr = sdf.format(day);
//打印到控制台
System.out.println("当前结束时间:"+dateNowStr);
/**
* 执行任务结束
*/
}
}

Console.java

import com.suyou.quartz.QuartzManager;
public class Console {

static int count = 0;

//任务名 不能一样
public static String JOB_NAME_PM = "18点55分30秒启动";
public static String JOB_NAME_AM = "6点55分30秒启动";
//任务组名 可以一样
public static String JOB_GROUP_NAME = "竞拍phone";
//触发器名 不能一样
public static String JOB_GROUP_NAME_PM = "pmStartPhone";
//触发器组名 可以一样
public static String JOB_GROUP_NAME_AM = "amStartPhone";
public static String TRIGGER_GROUP_NAME = "StartPhone";

public static void main(String[] args) {
/**
* 每天定时任务不用关
*/
try {
/**
* 下午执行的定时器任务,每天下午6点55分30秒执行函数一次
*/
QuartzManager.addJob(JOB_NAME_PM, JOB_GROUP_NAME, JOB_GROUP_NAME_PM, TRIGGER_GROUP_NAME, com.suyou.TestPhone.PhonePM.class, "30 55 18 * * ?");
/**
* 上午执行的定时器任务,每天上午7点00分30秒执行函数一次
*/
QuartzManager.addJob(JOB_NAME_AM, JOB_GROUP_NAME, JOB_GROUP_NAME_AM, TRIGGER_GROUP_NAME, com.suyou.TestPhone.PhoneAM.class, "30 00 7 * * ?");

} catch (Exception e) {
e.printStackTrace();
}
}
}

改好了控制台打印的也没了,代码复制过去SQL语句改成自己的,链接数据库也改成自己的就好了,如果只是测试的话可以不用链接数据库,我只是用来定时修改一个表的属性的。

如果两个定时器之间的时间相互间隔相同可以不用Quartz

Quartz 定时器,同时运用多个定时器的更多相关文章

  1. Spring整合Quartz实现动态定时器,相关api,定时器添加,删除,修改

    一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...

  2. [ZigBee] 5、ZigBee基础实验——图文与代码详解定时器1(16位定时器)(长文)

    1.定时器1概述 定时器1 是一个支持典型的定时/计数功能的独立16 位定时器,支持输入捕获,输出比较和PWM等功能.定时器有五个独立的捕获/比较通道.每个通道定时器要使用一个I/O 引脚.定时器用于 ...

  3. Linux使用一个定时器实现设置任意数量定时器功能【转】

    转自:https://www.jb51.net/article/120748.htm 为什么需要这个功能,因为大多数计算机软件时钟系统通常只能有一个时钟触发一次中断.当运行多个任务时,我们会想要多个定 ...

  4. [ZigBee] 6、ZigBee基础实验——定时器3和定时器4(8 位定时器)

    上一节讲了16位定时器1,本节讲8位定时器3和定时器4! 1.综述 Timer 3 and Timer 4 are two 8-bit timers(8位定时器). Each timer has tw ...

  5. Python软件定时器APScheduler使用【软件定时器,非操作系统定时器,软件可控的定时器】【用途:定时同步数据库和缓存等】【刘新宇】

    APScheduler使用 APScheduler (advanceded python scheduler)是一款Python开发的定时任务工具. 文档地址 https://apscheduler. ...

  6. Spring整合Quartz实现动态定时器

    一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...

  7. 利用redis分布式锁的功能来实现定时器的分布式

    文章来源于我的 iteye blog http://ak478288.iteye.com/blog/1898190 以前为部门内部开发过一个定时器程序,这个定时器很简单,就是配置quartz,来实现定 ...

  8. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  9. Spring定时器多定时任务配置

    spring-task.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

  10. 【转载】Java定时器的学习

    前几看了一下<thinking in java>了解到java原生的Times类有两个问题: (1)Timer是启动单个线程来处理所有的时间任务,如果一个任务耗时很久,那么如果在执行这个过 ...

随机推荐

  1. web安全之XSS和CSRF

    XSS 跨站脚本攻击(cross site script),本来缩写CSS单位了和层叠样式(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做“XSS”. XSS攻击,通 ...

  2. shell script-判断式

    test判断式 看下面: test -e /opt/a.txt && echo "exist" || echo "not exist" 判断 / ...

  3. C++成员指针

    C++中,成员指针是最为复杂的语法结构.但在事件驱动和多线程应用中被广泛用于调用回叫函数.在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数.在这样的应用中,如果不用成员指针,编程是非常困难 ...

  4. kafka之c接口常用API------librdkafka

    1 安装方法以及相关库文件 https://github.com/edenhill/librdkafka 2 High-level producer High-level consumer Simpl ...

  5. storm shell命令源码分析-shell_submission.clj

    当我们在shell里执行storm shell命令时会调用shell_submission.clj里的main函数.shell_submission.clj如下: shell_submission.c ...

  6. es6基础系列三:解构赋值

    解构就是ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值(只能用于数组,对象或迭代器).如果解构不成功,则等于undefined,但不能赋值为undefined和null,因为undefi ...

  7. .Net Core WebApi返回日期格式的问题

    环境:.net core 2.1 webapi 问题简介: 返回DateTime,前端接收到的字符有时候为2018-01-01T12:01:01,有时候为2018-01-01T01:01:01.722 ...

  8. JSONCPP开发环境搭建

    环境设置 项目地址 https://github.com/open-source-parsers/jsoncpp.git 操作系统 64位 Fedora 24 安装jsoncpp $ git clon ...

  9. 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ...

  10. 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组

    题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...