- 浏览: 56452 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (93)
- java (3)
- ios (9)
- wp (15)
- android (0)
- js (1)
- 服务器 (0)
- db (0)
- linux (1)
- python (0)
- xcode (0)
- ide (2)
- maven (0)
- spring (0)
- sql (0)
- 第三方 (1)
- nexus (0)
- nginx (11)
- tomcat (0)
- jenkins (0)
- zookeeper (1)
- git (1)
- svn (0)
- uml (0)
- redis (4)
- activemq (1)
- flume (0)
- kafka (0)
- mysql (1)
- memcached (0)
- mybatis (0)
- mac (0)
- mongo (1)
- docker (6)
- cache (0)
- jvm (0)
- markdown (0)
- springboot (24)
- mycat (3)
- LTS (3)
- 运维 (0)
- opts (1)
- netty (1)
- tcc (0)
- ffmpeg (2)
- 直播 (6)
- cxf (0)
- nodejs (0)
- storm (0)
- elasticjob (0)
- php (0)
最新评论
pom.xml
=========================================
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!-- Druid 数据连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
=========================================
QuartzConfig.java
=========================================
@Configuration
public class QuartzConfig {
/**
* 设置属性
*
* @return
* @throws IOException
*/
private Properties quartzProperties() throws IOException {
Properties prop = new Properties();
//Configure Main Scheduler Properties
prop.put("org.quartz.scheduler.instanceName", "DefaultQuartzScheduler");
prop.put("org.quartz.scheduler.wrapJobExecutionInUserTransaction", "false");
prop.put("org.quartz.scheduler.instanceId", "AUTO");
//Configure rmi
prop.put("org.quartz.scheduler.rmi.export", "false");
prop.put("org.quartz.scheduler.rmi.proxy", "false");
//Configure ThreadPool
prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
prop.put("org.quartz.threadPool.threadCount", "50");
prop.put("org.quartz.threadPool.threadPriority", "5");
prop.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread", "true");
//Configure JobStore
prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
prop.put("org.quartz.jobStore.dataSource", "myDS");
prop.put("org.quartz.jobStore.misfireThreshold", "60000");
prop.put("org.quartz.jobStore.isClustered", "true");
prop.put("org.quartz.jobStore.clusterCheckinInterval", "1000");
//Configure datasource
prop.put("org.quartz.dataSource.myDS.connectionProvider.class", "org.spring.springboot.config.QuartzDBConnection");
prop.put("org.quartz.dataSource.myDS.driver", "com.mysql.jdbc.Driver");
prop.put("org.quartz.dataSource.myDS.url", "jdbc:mysql://host:3306/movikr_quartz?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull");
prop.put("org.quartz.dataSource.myDS.user", "");
prop.put("org.quartz.dataSource.myDS.password", "");
prop.put("org.quartz.dataSource.myDS.maxConnections", "10");
prop.put("org.quartz.dataSource.myDS.validationQuery", "select 0");
return prop;
}
// <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
// <property name="corePoolSize" value="20" />
// <property name="maxPoolSize" value="150" />
// <property name="queueCapacity" value="500" />
// </bean>
@Bean(name = "schedulerFactoryBean")
@Lazy(true)
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
// this allows to update triggers in DB when updating settings in config file:
//用于quartz集群,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
factory.setOverwriteExistingJobs(true);
//用于quartz集群,加载quartz数据源
//factory.setDataSource(dataSource);
//QuartzScheduler 延时启动,应用启动完10秒后 QuartzScheduler 再启动
factory.setStartupDelay(5);
//用于quartz集群,加载quartz数据源配置
factory.setQuartzProperties(quartzProperties());
factory.setAutoStartup(true);
factory.setApplicationContextSchedulerContextKey("applicationContextKey");
//factory.setConfigLocation(new FileSystemResource(this.getClass().getResource("/quartz.properties").getPath()));
return factory;
}
@Bean(name = "schedule-service-QuartzManager", initMethod="initJobs")
//@DependsOn("springContextHolder")
public QuartzManager quartzManager() {
QuartzManager quartzManager = new QuartzManager();
return quartzManager;
}
}
=========================================
QuartzDBConnection.java
=========================================
public class QuartzDBConnection implements ConnectionProvider {
//JDBC驱动
public String driver;
//JDBC连接串
public String url;
//数据库用户名
public String user;
//数据库用户密码
public String password;
//数据库最大连接数
public int maxConnections;
//数据库SQL查询每次连接返回执行到连接池,以确保它仍然是有效的。
public String validationQuery;
private boolean validateOnCheckout;
private int idleConnectionValidationSeconds;
public String maxCachedStatementsPerConnection;
private String discardIdleConnectionsSeconds;
public static final int DEFAULT_DB_MAX_CONNECTIONS = 10;
public static final int DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION = 120;
//Druid连接池
private DruidDataSource datasource;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 接口实现
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
public Connection getConnection() throws SQLException {
return datasource.getConnection();
}
public void shutdown() throws SQLException {
datasource.close();
}
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 maxConnectins could not be created: Max connections must be greater than zero!");
}
datasource = new DruidDataSource();
try{
datasource.setDriverClassName(this.driver);
} catch (Exception e) {
try {
throw new SchedulerException("Problem setting driver class name on datasource: " + e.getMessage(), e);
} catch (SchedulerException e1) {
}
}
datasource.setUrl(this.url);
datasource.setUsername(this.user);
datasource.setPassword(this.password);
datasource.setMaxActive(this.maxConnections);
datasource.setMinIdle(1);
datasource.setMaxWait(0);
datasource.setMaxPoolPreparedStatementPerConnectionSize(this.DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION);
if (this.validationQuery != null) {
datasource.setValidationQuery(this.validationQuery);
if(!this.validateOnCheckout)
datasource.setTestOnReturn(true);
else
datasource.setTestOnBorrow(true);
datasource.setValidationQueryTimeout(this.idleConnectionValidationSeconds);
}
}
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;
}
public String getValidationQuery() {
return validationQuery;
}
public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}
public boolean isValidateOnCheckout() {
return validateOnCheckout;
}
public void setValidateOnCheckout(boolean validateOnCheckout) {
this.validateOnCheckout = validateOnCheckout;
}
public int getIdleConnectionValidationSeconds() {
return idleConnectionValidationSeconds;
}
public void setIdleConnectionValidationSeconds(int idleConnectionValidationSeconds) {
this.idleConnectionValidationSeconds = idleConnectionValidationSeconds;
}
public DruidDataSource getDatasource() {
return datasource;
}
public void setDatasource(DruidDataSource datasource) {
this.datasource = datasource;
}
}
================================================
QuartzManager.java
================================================
public class QuartzManager {
private static final Logger LOG = LoggerFactory.getLogger(QuartzManager.class);
@Resource(name = "schedulerFactoryBean")
private Scheduler scheduler;
/**
* 初始化(spring启动 或其他)可运行的job 立即执行
* 配置成bean 指定init-method="initJobs" 后于springContextHolder bean初始化
*/
public void initJobs() throws SchedulerException {
if (!scheduler.isShutdown()) {
scheduler.start();
}
}
}
=========================================
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!-- Druid 数据连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
=========================================
QuartzConfig.java
=========================================
@Configuration
public class QuartzConfig {
/**
* 设置属性
*
* @return
* @throws IOException
*/
private Properties quartzProperties() throws IOException {
Properties prop = new Properties();
//Configure Main Scheduler Properties
prop.put("org.quartz.scheduler.instanceName", "DefaultQuartzScheduler");
prop.put("org.quartz.scheduler.wrapJobExecutionInUserTransaction", "false");
prop.put("org.quartz.scheduler.instanceId", "AUTO");
//Configure rmi
prop.put("org.quartz.scheduler.rmi.export", "false");
prop.put("org.quartz.scheduler.rmi.proxy", "false");
//Configure ThreadPool
prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
prop.put("org.quartz.threadPool.threadCount", "50");
prop.put("org.quartz.threadPool.threadPriority", "5");
prop.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread", "true");
//Configure JobStore
prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
prop.put("org.quartz.jobStore.dataSource", "myDS");
prop.put("org.quartz.jobStore.misfireThreshold", "60000");
prop.put("org.quartz.jobStore.isClustered", "true");
prop.put("org.quartz.jobStore.clusterCheckinInterval", "1000");
//Configure datasource
prop.put("org.quartz.dataSource.myDS.connectionProvider.class", "org.spring.springboot.config.QuartzDBConnection");
prop.put("org.quartz.dataSource.myDS.driver", "com.mysql.jdbc.Driver");
prop.put("org.quartz.dataSource.myDS.url", "jdbc:mysql://host:3306/movikr_quartz?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull");
prop.put("org.quartz.dataSource.myDS.user", "");
prop.put("org.quartz.dataSource.myDS.password", "");
prop.put("org.quartz.dataSource.myDS.maxConnections", "10");
prop.put("org.quartz.dataSource.myDS.validationQuery", "select 0");
return prop;
}
// <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
// <property name="corePoolSize" value="20" />
// <property name="maxPoolSize" value="150" />
// <property name="queueCapacity" value="500" />
// </bean>
@Bean(name = "schedulerFactoryBean")
@Lazy(true)
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
// this allows to update triggers in DB when updating settings in config file:
//用于quartz集群,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
factory.setOverwriteExistingJobs(true);
//用于quartz集群,加载quartz数据源
//factory.setDataSource(dataSource);
//QuartzScheduler 延时启动,应用启动完10秒后 QuartzScheduler 再启动
factory.setStartupDelay(5);
//用于quartz集群,加载quartz数据源配置
factory.setQuartzProperties(quartzProperties());
factory.setAutoStartup(true);
factory.setApplicationContextSchedulerContextKey("applicationContextKey");
//factory.setConfigLocation(new FileSystemResource(this.getClass().getResource("/quartz.properties").getPath()));
return factory;
}
@Bean(name = "schedule-service-QuartzManager", initMethod="initJobs")
//@DependsOn("springContextHolder")
public QuartzManager quartzManager() {
QuartzManager quartzManager = new QuartzManager();
return quartzManager;
}
}
=========================================
QuartzDBConnection.java
=========================================
public class QuartzDBConnection implements ConnectionProvider {
//JDBC驱动
public String driver;
//JDBC连接串
public String url;
//数据库用户名
public String user;
//数据库用户密码
public String password;
//数据库最大连接数
public int maxConnections;
//数据库SQL查询每次连接返回执行到连接池,以确保它仍然是有效的。
public String validationQuery;
private boolean validateOnCheckout;
private int idleConnectionValidationSeconds;
public String maxCachedStatementsPerConnection;
private String discardIdleConnectionsSeconds;
public static final int DEFAULT_DB_MAX_CONNECTIONS = 10;
public static final int DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION = 120;
//Druid连接池
private DruidDataSource datasource;
/*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 接口实现
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
public Connection getConnection() throws SQLException {
return datasource.getConnection();
}
public void shutdown() throws SQLException {
datasource.close();
}
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 maxConnectins could not be created: Max connections must be greater than zero!");
}
datasource = new DruidDataSource();
try{
datasource.setDriverClassName(this.driver);
} catch (Exception e) {
try {
throw new SchedulerException("Problem setting driver class name on datasource: " + e.getMessage(), e);
} catch (SchedulerException e1) {
}
}
datasource.setUrl(this.url);
datasource.setUsername(this.user);
datasource.setPassword(this.password);
datasource.setMaxActive(this.maxConnections);
datasource.setMinIdle(1);
datasource.setMaxWait(0);
datasource.setMaxPoolPreparedStatementPerConnectionSize(this.DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION);
if (this.validationQuery != null) {
datasource.setValidationQuery(this.validationQuery);
if(!this.validateOnCheckout)
datasource.setTestOnReturn(true);
else
datasource.setTestOnBorrow(true);
datasource.setValidationQueryTimeout(this.idleConnectionValidationSeconds);
}
}
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;
}
public String getValidationQuery() {
return validationQuery;
}
public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}
public boolean isValidateOnCheckout() {
return validateOnCheckout;
}
public void setValidateOnCheckout(boolean validateOnCheckout) {
this.validateOnCheckout = validateOnCheckout;
}
public int getIdleConnectionValidationSeconds() {
return idleConnectionValidationSeconds;
}
public void setIdleConnectionValidationSeconds(int idleConnectionValidationSeconds) {
this.idleConnectionValidationSeconds = idleConnectionValidationSeconds;
}
public DruidDataSource getDatasource() {
return datasource;
}
public void setDatasource(DruidDataSource datasource) {
this.datasource = datasource;
}
}
================================================
QuartzManager.java
================================================
public class QuartzManager {
private static final Logger LOG = LoggerFactory.getLogger(QuartzManager.class);
@Resource(name = "schedulerFactoryBean")
private Scheduler scheduler;
/**
* 初始化(spring启动 或其他)可运行的job 立即执行
* 配置成bean 指定init-method="initJobs" 后于springContextHolder bean初始化
*/
public void initJobs() throws SchedulerException {
if (!scheduler.isShutdown()) {
scheduler.start();
}
}
}
发表评论
-
springboot:condition
2017-07-26 11:10 330public class LinuxCondition imp ... -
springboot:tomcat启动
2017-07-20 15:02 8871.在pom.xml里设置 <packaging> ... -
springboot:shiro
2017-07-13 15:52 922第一次学习系统学习shiro 并将shiro集成到sprin ... -
springboot:upload
2017-07-06 10:25 713FileUploadConfiguration.java == ... -
springboot:servlet
2017-07-06 10:17 464Application.java ============== ... -
springboot:freemarker
2017-07-05 17:33 481pom.xml ======================= ... -
springboot:task
2017-07-05 12:11 400TaskPool.java ================= ... -
springboot:热部署
2017-07-05 11:23 320pom.xml: ====================== ... -
springboot:注解
2017-07-04 11:36 575@EnableAutoConfiguration注解 excl ... -
springboot:server属性配置
2017-07-04 10:05 679server配置 ====================== ... -
springboot:memcached
2017-07-03 17:23 868pom.xml ======================= ... -
springboot:health
2017-07-03 16:43 357<dependency> ... -
springboot:mongodb
2017-07-03 15:38 1527pom.xml ======================= ... -
springboot:ControllerAdvice
2017-07-02 14:09 341全局异常拦截 //@ControllerAdvice(anno ... -
springboot:dubbo
2017-07-02 10:40 470server: ======================= ... -
springboot:amq
2017-07-01 22:20 433pom.xml ======================= ... -
springboot:redis(jedis)
2017-07-01 14:10 876application.properties ======== ... -
springboot:mybatis&druid&pagehelper
2017-07-01 13:35 368=============================== ... -
springboot:logback
2017-06-30 16:20 489=============================== ... -
springboot:interceptor
2017-06-30 14:04 593IncpConfig.java 增加拦截器config 继承W ...
相关推荐
本文章是关于springboot集成quartz集群的步骤,LZ亲测。
springboot 集成 quartz 集群 加 sql 等 文章介绍 单机加集群都有 https://blog.csdn.net/weixin_42749765/article/details/88532413
1、若是部署多台机器,到了时间点,只有一台会执行,其他不会执行。 2、若多个节点其中一个scheduler执行job失败,将会被另外一个scheduler执行
springboot 集成 quartz 集群 加 sql 加 打jar包 及介绍全套 博客地址:https://blog.csdn.net/weixin_42749765/article/details/88532413
springboot+quartz+mybatis:通过页面配置方式,动态配置dubbo job和http job,实现调度与业务完全解耦
SpringBoot整合Quartz任务定时调度,可以参考我的博客进行学习https://blog.csdn.net/sujin_/article/details/80615823
一个基于springboot的quartz集群dome。 向http://localhost:9090/job/addjob注入3个参数 类名:(及时定时任务的类如:com.ybjdw.site.job.NewJob) 组名:随意 定时启动方法:如“0/3 * * * * ?”(每3秒启动一次...
亲测可用,springboot整合quartz。包含2个核心类QuartzConfiguration类和JobFactory类,修改数据库连接application和quartz.properties直接运行,访问http://localhost:8080/index。
spring-cloud-alibaba+dubbo+nacos+quartz以yml配置方式实现
动态定时任务 SpringBoot quartz集群分布式。动态指定任意-demo-quartz-dynamic
org.quartz.dataSource.qzDS.URL = jdbc:mysql://localhost:3306/springboot_quartz_jdbc?useUnicode=true&characterEncoding=UTF-8 org.quartz.dataSource.qzDS.user = root org.quartz.dataSource.qzDS.password =...
执行resources中的sql脚本,修改数据库连接参数,亲测完美运行-----------------------------------------------------
spring-boot集成quartz实现动态任务管理,采用数据库存储方式,建表语句已经打包在一起,支持分布式集群。 代码开箱即用,没有集成业务模块,大家可以根据自己的业务场景自己去实现Job类即可。
今天小编就为大家分享一篇关于SpringBoot与Quartz集成实现分布式定时任务集群的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要给大家介绍了关于spring boot + quartz集群搭建的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文档包含以下章节:1、quartz简介;2、quartz快速入门;3、quartz核心API详解;4、quartz.properties配置详解;5、quartz持久化;6、quartz集群部署;7、springboot整合quartz。8、常见分布式调度框架的比较;
数据库mysql,框架为springboot+quartz搭建的集群定时任务例子,resource/static内含建表语句
最近学习springboot吧...其中包括mybatis,cfx的webservice,定时器quartz,消息队列kafka以及redis其中redis包含了三种连接方式(单机模式,集群cluster,哨兵模式),给大家做一个参考 希望能让别人学习时少走弯路
Quartz具有很高的可靠性和灵活性,支持集群部署和分布式调度,并且提供了丰富的API和插件,可以轻松实现复杂的调度需求。Quartz的工作原理是通过Job和Trigger两个核心概念来实现的,Job是具体需要执行的任务,...
基于SpringBoot 2.0,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,redis管理Session,Quartz分布式集群调度,Restful服务;系统管理:包括用户管理、权限管理、数据字典、系统...