Springboot quartz sqlite
·
首先引入我们的非常牛皮的jar~
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
加一个非常牛皮的配置类
@Configuration
public class QuartzConfig implements SchedulerFactoryBeanCustomizer {
@Resource
private DataSource dataSource;
@Override
public void customize(SchedulerFactoryBean schedulerFactoryBean) {
// 启动延时
schedulerFactoryBean.setStartupDelay(2);
// 自动启动任务调度
schedulerFactoryBean.setAutoStartup(true);
// 是否覆盖现有作业定义
schedulerFactoryBean.setOverwriteExistingJobs(true);
// 配置数据源
schedulerFactoryBean.setDataSource(dataSource);
}
}
不用自带的c3p0连接池 我要用Hikari 嗯 quartz里存在这个 但是配置了报错 自己加一个
public class HikariConnectionProvider implements ConnectionProvider {
public String driver;
public String URL;
public String user;
public String password;
public int maxConnections;
private HikariDataSource datasource;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getURL() {
return URL;
}
public void setURL(String URL) {
this.URL = URL;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getMaxConnections() {
return maxConnections;
}
public void setMaxConnections(int maxConnections) {
this.maxConnections = maxConnections;
}
@Override
public Connection getConnection() throws SQLException {
return datasource.getConnection();
}
@Override
public void shutdown() {
datasource.close();
}
@Override
public void initialize() throws SQLException {
if (this.URL == null) {
throw new SQLException("DBPool could not be created: DB URL cannot be null");
}
if (this.driver == null) {
throw new SQLException("DBPool driver could not be created: DB driver class name cannot be null!");
}
if (this.maxConnections < 0) {
throw new SQLException("DBPool maxConnections could not be created: Max connections must be greater than zero!");
}
datasource = new HikariDataSource();
try {
datasource.setDriverClassName(this.driver);
} catch (Exception e) {
try {
throw new SchedulerException("Problem setting driver class name on datasource: " + e.getMessage(), e);
} catch (SchedulerException ignored) {
}
}
datasource.setJdbcUrl(this.URL);
datasource.setUsername(this.user);
datasource.setPassword(this.password);
datasource.setMaximumPoolSize(this.maxConnections);
}
}
嗯 还有我们非常牛皮的要持久化一下 sqlite sql
create table QRTZ_CALENDARS
(
SCHED_NAME NVARCHAR(120) not null,
CALENDAR_NAME NVARCHAR(200) not null,
CALENDAR BLOB not null,
primary key (SCHED_NAME, CALENDAR_NAME)
);
create table QRTZ_FIRED_TRIGGERS
(
SCHED_NAME NVARCHAR(120) not null,
ENTRY_ID NVARCHAR(140) not null,
TRIGGER_NAME NVARCHAR(150) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
INSTANCE_NAME NVARCHAR(200) not null,
FIRED_TIME BIGINT not null,
SCHED_TIME BIGINT not null,
PRIORITY INTEGER not null,
STATE NVARCHAR(16) not null,
JOB_NAME NVARCHAR(150),
JOB_GROUP NVARCHAR(150),
IS_NONCONCURRENT BIT,
REQUESTS_RECOVERY BIT,
primary key (SCHED_NAME, ENTRY_ID)
);
create table QRTZ_JOB_DETAILS
(
SCHED_NAME NVARCHAR(120) not null,
JOB_NAME NVARCHAR(150) not null,
JOB_GROUP NVARCHAR(150) not null,
DESCRIPTION NVARCHAR(250),
JOB_CLASS_NAME NVARCHAR(250) not null,
IS_DURABLE BIT not null,
IS_NONCONCURRENT BIT not null,
IS_UPDATE_DATA BIT not null,
REQUESTS_RECOVERY BIT not null,
JOB_DATA BLOB,
primary key (SCHED_NAME, JOB_NAME, JOB_GROUP)
);
create table QRTZ_LOCKS
(
SCHED_NAME NVARCHAR(120) not null,
LOCK_NAME NVARCHAR(40) not null,
primary key (SCHED_NAME, LOCK_NAME)
);
create table QRTZ_PAUSED_TRIGGER_GRPS
(
SCHED_NAME NVARCHAR(120) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
primary key (SCHED_NAME, TRIGGER_GROUP)
);
create table QRTZ_SCHEDULER_STATE
(
SCHED_NAME NVARCHAR(120) not null,
INSTANCE_NAME NVARCHAR(200) not null,
LAST_CHECKIN_TIME BIGINT not null,
CHECKIN_INTERVAL BIGINT not null,
primary key (SCHED_NAME, INSTANCE_NAME)
);
create table QRTZ_TRIGGERS
(
SCHED_NAME NVARCHAR(120) not null,
TRIGGER_NAME NVARCHAR(150) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
JOB_NAME NVARCHAR(150) not null,
JOB_GROUP NVARCHAR(150) not null,
DESCRIPTION NVARCHAR(250),
NEXT_FIRE_TIME BIGINT,
PREV_FIRE_TIME BIGINT,
PRIORITY INTEGER,
TRIGGER_STATE NVARCHAR(16) not null,
TRIGGER_TYPE NVARCHAR(8) not null,
START_TIME BIGINT not null,
END_TIME BIGINT,
CALENDAR_NAME NVARCHAR(200),
MISFIRE_INSTR INTEGER,
JOB_DATA BLOB,
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
foreign key (SCHED_NAME, JOB_NAME, JOB_GROUP) references QRTZ_JOB_DETAILS
);
create table QRTZ_BLOB_TRIGGERS
(
SCHED_NAME NVARCHAR(120) not null,
TRIGGER_NAME NVARCHAR(150) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
BLOB_DATA BLOB,
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references QRTZ_TRIGGERS
on delete cascade
);
create table QRTZ_CRON_TRIGGERS
(
SCHED_NAME NVARCHAR(120) not null,
TRIGGER_NAME NVARCHAR(150) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
CRON_EXPRESSION NVARCHAR(250) not null,
TIME_ZONE_ID NVARCHAR(80),
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references QRTZ_TRIGGERS
on delete cascade
);
create table QRTZ_SIMPLE_TRIGGERS
(
SCHED_NAME NVARCHAR(120) not null,
TRIGGER_NAME NVARCHAR(150) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
REPEAT_COUNT BIGINT not null,
REPEAT_INTERVAL BIGINT not null,
TIMES_TRIGGERED BIGINT not null,
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references QRTZ_TRIGGERS
on delete cascade
);
create table QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME NVARCHAR(120) not null,
TRIGGER_NAME NVARCHAR(150) not null,
TRIGGER_GROUP NVARCHAR(150) not null,
STR_PROP_1 NVARCHAR(512),
STR_PROP_2 NVARCHAR(512),
STR_PROP_3 NVARCHAR(512),
INT_PROP_1 INT,
INT_PROP_2 INT,
LONG_PROP_1 BIGINT,
LONG_PROP_2 BIGINT,
DEC_PROP_1 NUMERIC,
DEC_PROP_2 NUMERIC,
BOOL_PROP_1 BIT,
BOOL_PROP_2 BIT,
TIME_ZONE_ID NVARCHAR(80),
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references QRTZ_TRIGGERS
on delete cascade
);
CREATE TRIGGER DELETE_BLOB_TRIGGER DELETE ON QRTZ_TRIGGERS
BEGIN
DELETE FROM QRTZ_BLOB_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
END;
CREATE TRIGGER DELETE_CRON_TRIGGER DELETE ON QRTZ_TRIGGERS
BEGIN
DELETE FROM QRTZ_CRON_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
END;
CREATE TRIGGER DELETE_SIMPLE_TRIGGER DELETE ON QRTZ_TRIGGERS
BEGIN
DELETE FROM QRTZ_SIMPLE_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
END;
CREATE TRIGGER DELETE_SIMPROP_TRIGGER DELETE ON QRTZ_TRIGGERS
BEGIN
DELETE FROM QRTZ_SIMPROP_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
END;
然后 写一个牛皮的job任务类
public class TestJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("执行");
}
}
然后写一个牛皮的测试方法
@Test
void test2() throws ClassNotFoundException, SchedulerException {
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName("com.hsqy.start.TestJob");
JobKey jobKey = new JobKey("jobKey", "jobGroup");
TriggerKey triggerKey = new TriggerKey("triggerKey", "triggerGroup");
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(jobKey)
.withDescription("desc")
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey)
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * * * ?"))
.build();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
那么最牛皮的是什么呢
就是
就是
就是
上面的代码并没有什么卵用!!!!!!
quartz里用到了个数据库的行锁 FOR UPDATE
sqlite不支持
所以我最终只止步于此 后面还会有啥错误我也不晓得了
我很无奈 所以我只能打算自己加个表简单持久化一下任务 嗯
有没有人这样搞过 成功的话能不能教教我!!!
更多推荐

所有评论(0)