spring boot整合quartz 任务信息存放到SqlServer数据库

第一步:添加依赖    org.springframework.boot    spring-boot-starter-quartz

第二步:写定时任务public class TestTask extends QuartzJobBean {    @Override    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println("TestQuartz01----" + sdf.format(new Date()));    }}


@Configuration

public class QuartzConfig {    @Bean    public JobDetail testTask(){        return JobBuilder.newJob(TestTask.class).withIdentity("testTask").storeDurably().build();    }    @Bean    public Trigger testTestTask(){        return TriggerBuilder.newTrigger()                .forJob(testTask())                .withIdentity("testTask")                .withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?"))                .build();    }}

第三步:执行SqlServer脚本--# thanks to George Papastamatopoulos for submitting this ... and Marko Lahma for--# updating it.--#--# In your Quartz properties file, you'll need to set --# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate--#--# you shouse enter your DB instance's name on the next line in place of "enter_db_name_here"--#--#--# From a helpful (but anonymous) Quartz user:--#--# Regarding this error message:  --#--#    [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.--#--#--#    I added "SelectMethod=cursor;" to my Connection URL in the config file. --#    It Seems to work, hopefully no side effects.--#--# example:--# "jdbc:microsoft:sqlserver://dbmachine:1433;SelectMethod=cursor"; --#--# Another user has pointed out that you will probably need to use the --# JTDS driver--#USE [enter_db_name_here]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_TRIGGERS] DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_CALENDARS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_LOCKS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_JOB_DETAILS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_TRIGGERS]GOCREATE TABLE [dbo].[QRTZ_CALENDARS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [CALENDAR_NAME] [VARCHAR] (200)  NOT NULL ,  [CALENDAR] [IMAGE] NOT NULL) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [TRIGGER_NAME] [VARCHAR] (200)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ,  [CRON_EXPRESSION] [VARCHAR] (120)  NOT NULL ,  [TIME_ZONE_ID] [VARCHAR] (80) ) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [ENTRY_ID] [VARCHAR] (95)  NOT NULL ,  [TRIGGER_NAME] [VARCHAR] (200)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ,  [INSTANCE_NAME] [VARCHAR] (200)  NOT NULL ,  [FIRED_TIME] [BIGINT] NOT NULL ,  [SCHED_TIME] [BIGINT] NOT NULL ,  [PRIORITY] [INTEGER] NOT NULL ,  [STATE] [VARCHAR] (16)  NOT NULL,  [JOB_NAME] [VARCHAR] (200)  NULL ,  [JOB_GROUP] [VARCHAR] (200)  NULL ,  [IS_NONCONCURRENT] [VARCHAR] (1)  NULL ,  [REQUESTS_RECOVERY] [VARCHAR] (1)  NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [INSTANCE_NAME] [VARCHAR] (200)  NOT NULL ,  [LAST_CHECKIN_TIME] [BIGINT] NOT NULL ,  [CHECKIN_INTERVAL] [BIGINT] NOT NULL) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_LOCKS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [LOCK_NAME] [VARCHAR] (40)  NOT NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_JOB_DETAILS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [JOB_NAME] [VARCHAR] (200)  NOT NULL ,  [JOB_GROUP] [VARCHAR] (200)  NOT NULL ,  [DESCRIPTION] [VARCHAR] (250) NULL ,  [JOB_CLASS_NAME] [VARCHAR] (250)  NOT NULL ,  [IS_DURABLE] [VARCHAR] (1)  NOT NULL ,  [IS_NONCONCURRENT] [VARCHAR] (1)  NOT NULL ,  [IS_UPDATE_DATA] [VARCHAR] (1)  NOT NULL ,  [REQUESTS_RECOVERY] [VARCHAR] (1)  NOT NULL ,  [JOB_DATA] [IMAGE] NULL) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [TRIGGER_NAME] [VARCHAR] (200)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ,  [REPEAT_COUNT] [BIGINT] NOT NULL ,  [REPEAT_INTERVAL] [BIGINT] NOT NULL ,  [TIMES_TRIGGERED] [BIGINT] NOT NULL) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [TRIGGER_NAME] [VARCHAR] (200)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ,  [STR_PROP_1] [VARCHAR] (512) NULL,  [STR_PROP_2] [VARCHAR] (512) NULL,  [STR_PROP_3] [VARCHAR] (512) NULL,  [INT_PROP_1] [INT] NULL,  [INT_PROP_2] [INT] NULL,  [LONG_PROP_1] [BIGINT] NULL,  [LONG_PROP_2] [BIGINT] NULL,  [DEC_PROP_1] [NUMERIC] (13,4) NULL,  [DEC_PROP_2] [NUMERIC] (13,4) NULL,  [BOOL_PROP_1] [VARCHAR] (1) NULL,  [BOOL_PROP_2] [VARCHAR] (1) NULL,) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [TRIGGER_NAME] [VARCHAR] (200)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ,  [BLOB_DATA] [IMAGE] NULL) ON [PRIMARY]GOCREATE TABLE [dbo].[QRTZ_TRIGGERS] (  [SCHED_NAME] [VARCHAR] (120)  NOT NULL ,  [TRIGGER_NAME] [VARCHAR] (200)  NOT NULL ,  [TRIGGER_GROUP] [VARCHAR] (200)  NOT NULL ,  [JOB_NAME] [VARCHAR] (200)  NOT NULL ,  [JOB_GROUP] [VARCHAR] (200)  NOT NULL ,  [DESCRIPTION] [VARCHAR] (250) NULL ,  [NEXT_FIRE_TIME] [BIGINT] NULL ,  [PREV_FIRE_TIME] [BIGINT] NULL ,  [PRIORITY] [INTEGER] NULL ,  [TRIGGER_STATE] [VARCHAR] (16)  NOT NULL ,  [TRIGGER_TYPE] [VARCHAR] (8)  NOT NULL ,  [START_TIME] [BIGINT] NOT NULL ,  [END_TIME] [BIGINT] NULL ,  [CALENDAR_NAME] [VARCHAR] (200)  NULL ,  [MISFIRE_INSTR] [SMALLINT] NULL ,  [JOB_DATA] [IMAGE] NULL) ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_CALENDARS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [CALENDAR_NAME]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [ENTRY_ID]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_GROUP]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [INSTANCE_NAME]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_LOCKS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [LOCK_NAME]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [JOB_NAME],    [JOB_GROUP]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  )  ON [PRIMARY]GOALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) REFERENCES [dbo].[QRTZ_TRIGGERS] (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) ON DELETE CASCADEGOALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) REFERENCES [dbo].[QRTZ_TRIGGERS] (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) ON DELETE CASCADEGOALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) REFERENCES [dbo].[QRTZ_TRIGGERS] (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) ON DELETE CASCADEGOALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY  (    [SCHED_NAME],    [JOB_NAME],    [JOB_GROUP]  ) REFERENCES [dbo].[QRTZ_JOB_DETAILS] (    [SCHED_NAME],    [JOB_NAME],    [JOB_GROUP]  )GO

第四步:修改yml配置文件spring: quartz: job-store-type: jdbc 然后运行~~

之后报错 第 1 行: 只有 DECLARE CURSOR 才允许使用 FOR UPDATE 子句。 网上找了很久,最后结合了一下,在yml文件中添加 spring:  quartz:    job-store-type: jdbc    properties:      org:        quartz:          jobStore:            selectWithLockSQL: SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?问题顺利解决~~~~

你可能感兴趣的:(spring boot整合quartz 任务信息存放到SqlServer数据库)