效果:每天执行两个定时器,两个定时器不相关联。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. 关于使用struts2跳转后css和js失效的解决方式

    根据观察,主要是由于通过action跳转后的url会根据命名空间,自动跳转到命名空间子目录,使得当前引用的css和js查找不到,从而失效,根据这个原因,可使用四种办法解决: 1.使用struts2.x ...

  2. Java探索之旅(13)——字符串类String

    1.初始化 String类是Java预定义类,非基本类型而是引用类型. public class StudyString { public static void main(String[] args ...

  3. SpringBoot02 Controller的使用、数据库操作、事物管理、修改banner

    1 Controller的使用 特点:编程技巧和SpringMVC几乎完全一样 注意:@RestController = @Controller + @ResponseBody 注意:读取路径参数和请 ...

  4. Spring入门第一课

    今天先不讲Spring是什么. Spring网址:http://projects.spring.io/spring-framework/ Eclipse 安装开发IDE 在Eclipse Market ...

  5. 23. Bypass ngx_lua_waf SQL注入防御(多姿势)

    0x00 前言 ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+(f ...

  6. 目标检测的图像特征提取之_LBP特征

    LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietikäinen ...

  7. Spark Streaming 官网上提到的几点调优

    总的来说,需要考虑以下两点: 1. 有效地运用集群资源去减少每个批次处理的时间 2. 正确的设置batch size,以使得处理速度能跟上接收速度 一.  为了减少处理时间,主要有以下几个优化点: 1 ...

  8. eclipse导出带有图片、音效、其他二进制文件的jar文件的经历

    先说下简单流程吧: 1.选中“项目”,右键->export->java的“jar file”->勾选“export generated clas files and resource ...

  9. react native ios打包,即生产包

    参考文章:http://www.devio.org/2017/02/09/React-Native%E5%8F%91%E5%B8%83APP%E4%B9%8B%E6%89%93%E5%8C%85iOS ...

  10. jmeter 签名MD5生成(转)

    请求接口需要同时发送签名,签名定义为: 可以看出签名就是把用户的密码 .用户名 和签名key生成一个md5串就可以了 刚好jmeter 有个md5 生成,生成前需要获取name ,password k ...