apzl_leasing/src_tenwa/quartz/AutoExecuteMission.java
2023-05-23 15:18:30 +08:00

543 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package quartz;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import jbo.sys.QUARTZ_MISSION_LIST;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.Trigger.TriggerState;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
import com.amarsoft.are.jbo.JBOException;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.are.jbo.JBOTransaction;
public class AutoExecuteMission implements ServletContextListener{
private Scheduler scheduler;
private String jobName;
private String jobGroup;
private String triggerName;
private String triggerGroup;
private String time;
private String className;
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public String getJobGroup() {
return jobGroup;
}
public void setJobGroup(String jobGroup) {
this.jobGroup = jobGroup;
}
public String getTriggerName() {
return triggerName;
}
public void setTriggerName(String triggerName) {
this.triggerName = triggerName;
}
public String getTriggerGroup() {
return triggerGroup;
}
public void setTriggerGroup(String triggerGroup) {
this.triggerGroup = triggerGroup;
}
public AutoExecuteMission(){
// SchedulerFactory sf = new StdSchedulerFactory();
try {
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scheduler = StdSchedulerFactory.getDefaultScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>
* @throws SchedulerException
*/
public void start() throws SchedulerException
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scheduler.start();
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
* @return
* @throws SchedulerException
*/
public boolean isStarted() throws SchedulerException
{
//<2F>ж϶<D0B6>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
return scheduler.isStarted();
}
/**
* <20>رյ<D8B1><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @throws SchedulerException
*/
public void shutdown() throws SchedulerException {
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>
scheduler.shutdown();
}
public String update(JBOTransaction tx){
try {
//<2F><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rows = JBOFactory.getBizObjectManager(QUARTZ_MISSION_LIST.CLASS_NAME)
.createQuery("update O set mission_status=:Status where mission_id=:id")
.setParameter("Status", status).setParameter("id", jobName).executeUpdate();
if(rows>0){
//<2F>ж϶<D0B6>ʱ<EFBFBD><CAB1>״̬
if("start".equals(status)){
this.restartJob();
TriggerState status = scheduler.getTriggerState(this.getCronTrigger().getKey());
if("NORMAL".equals(status.toString())){
return "1";//<2F><>ʶ״̬<D7B4><CCAC><EFBFBD>³ɹ<C2B3>
}
}else if("pause".equals(status)){
this.stopJob();
TriggerState status = scheduler.getTriggerState(this.getCronTrigger().getKey());
if("PAUSED".equals(status.toString())){
return "1";//<2F><>ʶ״̬<D7B4><CCAC><EFBFBD>³ɹ<C2B3>
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "2";//<2F><>ʾ״̬<D7B4><CCAC><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
}
public JobDetail getJobDetail(){
Class c;
JobDetail jobDetail;
try {
c = Class.forName(className);
jobDetail = JobBuilder.newJob(c).withIdentity(jobName, jobGroup).build();
return jobDetail;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void updateTime(){
try {
JBOFactory.getBizObjectManager(QUARTZ_MISSION_LIST.CLASS_NAME)
.createQuery("update O set time=:Time where mission_id=:id").setParameter("Time", time)
.setParameter("id", jobName).executeUpdate();
} catch (JBOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public CronTrigger getCronTrigger(){
//<2F><>ҵ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
CronTrigger cronTrigger = TriggerBuilder.
newTrigger().
withIdentity(triggerName, triggerGroup).
withSchedule(CronScheduleBuilder.cronSchedule(time)). //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CronScheduleBuilder <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CronTrigger <20><><EFBFBD><EFBFBD>
build();
return cronTrigger;
}
public String createJob(JBOTransaction tx){
try {
scheduler.deleteJob(this.getJobDetail().getKey());
this.scheduleJob(this.getJobDetail(), getCronTrigger());
//scheduler.triggerJob(this.getJobDetail().getKey());
return this.update(tx);
} catch (Exception e) {
e.printStackTrace();
}
return "2";
}
public String executeMission(JBOTransaction tx){
try {
String now = String.valueOf(System.currentTimeMillis());
jobName = now;
jobGroup = now;
triggerName = now;
triggerGroup = now;
time = "1/10 * * * * ?";
//scheduler.deleteJob(getJobDetail().getKey());
scheduler.scheduleJob(getJobDetail(), getCronTrigger());
scheduler.triggerJob(getJobDetail().getKey());
scheduler.start();
scheduler.unscheduleJob(getCronTrigger().getKey());
scheduler.deleteJob(getJobDetail().getKey());
return "1";
} catch (SchedulerException e) {
e.printStackTrace();
}
return "1";
}
public void whenServiceStart(){
try {
this.scheduleJob(this.getJobDetail(), getCronTrigger());
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* <20><><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD>job<6F><62>Ϣ
* @param jobdetail
* @param trigger
* @return
* @throws SchedulerException
*/
public Date scheduleJob(JobDetail jobdetail, Trigger trigger)
throws SchedulerException{
return scheduler.scheduleJob(jobdetail, trigger);
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EFBFBD><EFBFBD>
* @param trigger
* @return
* @throws SchedulerException
*/
public Date scheduleJob(Trigger trigger) throws SchedulerException{
return scheduler.scheduleJob(trigger);
}
/**
* <20><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param triggersAndJobs
* @param replace
* @throws SchedulerException
*/
public void scheduleJobs(Map<JobDetail, Set<? extends Trigger>> triggersAndJobs, boolean replace) throws SchedulerException
{
scheduler.scheduleJobs(triggersAndJobs, replace);
}
/**
* ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>Job<6F><62><EFBFBD><EFBFBD>
* @param triggerkey
* @return
* @throws SchedulerException
*/
public void stopJob(){
try {
this.pauseJob(this.getJobDetail().getKey());
this.pauseTrigger(this.getCronTrigger().getKey());
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public boolean unscheduleJob(TriggerKey triggerkey)
throws SchedulerException{
return scheduler.unscheduleJob(triggerkey);
}
/**
* ֹͣ<CDA3><D6B9><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>job
* @param list
* @return
* @throws SchedulerException
*/
public boolean unscheduleJobs(List<TriggerKey> triggerKeylist) throws SchedulerException{
return scheduler.unscheduleJobs(triggerKeylist);
}
/**
* <20><><EFBFBD>»ָ<C2BB><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param triggerkey
* @param trigger
* @return
* @throws SchedulerException
*/
public Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
throws SchedulerException{
return scheduler.rescheduleJob(triggerkey, trigger);
}
/**
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param jobdetail
* @param flag
* @throws SchedulerException
*/
public void addJob(JobDetail jobdetail, boolean flag)
throws SchedulerException {
scheduler.addJob(jobdetail, flag);
}
/**
* ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param jobkey
* @return
* @throws SchedulerException
*/
public boolean deleteJob(JobKey jobkey) throws SchedulerException{
return scheduler.deleteJob(jobkey);
}
/**
* ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>صĶ<D8B5><C4B6><EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param jobKeys
* @return
* @throws SchedulerException
*/
public boolean deleteJobs(List<JobKey> jobKeys)
throws SchedulerException{
return scheduler.deleteJobs(jobKeys);
}
/**
* <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB>
*/
public void startNow(){
try {
this.triggerJob(this.getJobDetail().getKey());
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
*
* @param jobkey
* @throws SchedulerException
*/
public void triggerJob(JobKey jobkey) throws SchedulerException {
scheduler.triggerJob(jobkey);
}
/**
*
* @param jobkey
* @param jobdatamap
* @throws SchedulerException
*/
public void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
throws SchedulerException {
scheduler.triggerJob(jobkey, jobdatamap);
}
/**
* ֹͣһ<D6B9><D2BB>job<6F><62><EFBFBD><EFBFBD>
* @param jobkey
* @throws SchedulerException
*/
public void pauseJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
}
/**
* ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param groupmatcher
* @throws SchedulerException
*/
public void pauseJobs(GroupMatcher<JobKey> groupmatcher)
throws SchedulerException {
scheduler.pauseJobs(groupmatcher);
}
/**
* ֹͣʹ<D6B9><CAB9><EFBFBD><EFBFBD><EFBFBD>صĴ<D8B5><C4B4><EFBFBD><EFBFBD><EFBFBD>
* @param triggerkey
* @throws SchedulerException
*/
public void pauseTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.pauseTrigger(triggerkey);
}
public void pauseTriggers(GroupMatcher<TriggerKey> groupmatcher)
throws SchedulerException {
scheduler.pauseTriggers(groupmatcher);
}
/**
* <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ص<EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @param jobkey
* @throws SchedulerException
*/
public void restartJob(){
try {
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
scheduler.deleteJob(this.getJobDetail().getKey());
this.scheduleJob(this.getJobDetail(), this.getCronTrigger());
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱִ<CAB1><D6B4>һ<EFBFBD>ζ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
scheduler.triggerJob(this.getJobDetail().getKey());
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void resumeJob(JobKey jobkey) throws SchedulerException {
scheduler.resumeJob(jobkey);
}
public void resumeJobs(GroupMatcher<JobKey> matcher)
throws SchedulerException {
scheduler.resumeJobs(matcher);
}
public void resumeTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.resumeTrigger(triggerkey);
}
public void resumeTriggers(GroupMatcher<TriggerKey> groupmatcher)
throws SchedulerException
{
scheduler.resumeTriggers(groupmatcher);
}
/**
* <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>job<6F><62><EFBFBD><EFBFBD>
* @throws SchedulerException
*/
public void pauseAll() throws SchedulerException
{
scheduler.pauseAll();
}
/**
* <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>job<6F><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @throws SchedulerException
*/
public void resumeAll() throws SchedulerException
{
scheduler.resumeAll();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
Connection con = null;
try {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
scheduler.start();
//<2F><>ȡJDBC<42><43><EFBFBD><EFBFBD>(<28><>ΪJBO<42><4F><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>)
Class.forName("com.mysql.jdbc.Driver");
//<2F><><EFBFBD><EFBFBD>XML<4D>Ķ<EFBFBD><C4B6><EFBFBD>
SAXReader reader = new SAXReader();
//<2F><>ȡ<EFBFBD><C8A1>ǰJAVA<56>ľ<EFBFBD><C4BE><EFBFBD>·<EFBFBD><C2B7>
String path = this.getClass().getResource("/").getPath().substring(1);
//<2F><>·<EFBFBD><C2B7>ת<EFBFBD><D7AA>Ϊ/META-INF/Context.xml
path = path.substring(0, path.indexOf("/WEB-INF"));
path = path+"/META-INF/Context.xml";
Document doc = reader.read(path);
//<2F><><EFBFBD><EFBFBD>XML<4D><4C>Ŀ¼
Element root = doc.getRootElement();
//Ѱ<>ұ<EFBFBD>ǩ
Element el = root.element("Resource");
//Ѱ<>ұ<EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
Attribute attr = el.attribute("url");
Attribute username = el.attribute("username");
Attribute password = el.attribute("password");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
String url = attr.getValue();
String user = username.getValue();
String pwd = password.getValue();
//<2F><>ȡjdbc<62><63><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
con = DriverManager.getConnection(url,user,pwd);
//<2F><><EFBFBD><EFBFBD><EFBFBD>
Statement stat = con.createStatement();
//ִ<><D6B4>SQL
ResultSet rs = stat.executeQuery("select * from quartz_mission_list");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while(rs.next()){
AutoExecuteMission aem = new AutoExecuteMission();
aem.setJobName(rs.getString("mission_id"));
aem.setJobGroup(rs.getString("mission_id"));
aem.setTriggerName(rs.getString("mission_id"));
aem.setTriggerGroup(rs.getString("mission_id"));
aem.setTime(rs.getString("time"));
aem.setClassName(rs.getString("mission_name"));
String status = rs.getString("mission_status");
if("start".equals(status)){
//<2F><>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĶ<D0B5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
aem.scheduleJob(aem.getJobDetail(),aem.getCronTrigger());
}else{
//<2F><>ͣ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// aem.whenServiceStart();
// aem.stopJob();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(con != null){
try {
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}