您的位置:首页 > 文旅 > 美景 > 网络公司经营范围许可_西宁市解封最新消息_百度官方网站首页_网上怎么找客户资源

网络公司经营范围许可_西宁市解封最新消息_百度官方网站首页_网上怎么找客户资源

2025/4/2 11:17:35 来源:https://blog.csdn.net/weixin_46054799/article/details/146547785  浏览:    关键词:网络公司经营范围许可_西宁市解封最新消息_百度官方网站首页_网上怎么找客户资源
网络公司经营范围许可_西宁市解封最新消息_百度官方网站首页_网上怎么找客户资源

1.添加pom文件

        <dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.3.24</version> <!-- 根据你的 Spring 版本调整 --></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.15</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version></dependency>

2.配置文件
 

server:port: 80spring:application:name: quartz_demoservlet:multipart:enabled: truemax-file-size: 200MBmax-request-size: 200MBdatasource:type: com.alibaba.druid.pool.DruidDataSourcedynamic:primary: masterstrict: falsedatasource:master:url: jdbc:mysql://192.168.1.42:3306/base?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: Qazxsw21`driver-class-name: com.mysql.cj.jdbc.Driverquartz:url: jdbc:mysql://192.168.1.43:3306/quartz?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: Qazxsw21`driver-class-name: com.mysql.cj.jdbc.Driverdruid:initial-size: 8min-idle: 1max-active: 20max-wait: 60000time-between-eviction-runsMillis: 60000min-evictable-idle-timeMillis: 30000validation-query: select 1test-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: truemax-open-prepared-statements: 20max-pool-prepared-statement-per-connection-size: 20filters: statconnection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000use-global-data-source-stat: truemvc:pathmatch:matching-strategy: ant_path_matcherorg:quartz:scheduler:# 调度器实例名称,用于标识特定的调度器实例instanceName: SERVICEX-SCHEDULER-INSTANCE# 实例ID,AUTO表示自动生成instanceId: AUTOinstanceIdGenerator:# 实例ID生成器类,使用简单的自增ID生成器class: org.quartz.simpl.SimpleInstanceIdGeneratorjobStore:# 作业存储方式,使用JDBC事务型存储class: org.quartz.impl.jdbcjobstore.JobStoreTX# JDBC驱动委托类,标准JDBC实现driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate# 数据库表前缀tablePrefix: QRTZ_# 是否启用集群模式isClustered: true# 集群节点检查间隔(毫秒)clusterCheckinInterval: 15000# 是否将JobDataMap中的值作为字符串存储useProperties: false# 数据库行锁SQL(针对不同数据库可能需要调整)selectWithLockSQL: SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATEthreadPool:# 线程池实现类class: org.quartz.simpl.SimpleThreadPool# 线程池大小threadCount: 10# 线程优先级(1-10)threadPriority: 5# 线程是否继承初始化线程的上下文类加载器threadsInheritContextClassLoaderOfInitializingThread: true

3.quartz的config文件(这里可以添加动态增删改查任务的方法,具体大家自己找一下,网上很多)

package com.quartz.demo.bootquartz.scheduler;import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import org.quartz.Scheduler;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;import java.util.Properties;/*** @ClassName SchedulerConfig* @Description 任务调度器* @Author LiuJiWei* @Date 2025/3/26 星期三* @Version 1.0*/
@Component
@Configuration
public class SchedulerConfig {/*** 调度器*/private Scheduler scheduler;/*** 获取调度器** @return Scheduler* @throws Exception*/@Beanpublic Scheduler scheduler(SchedulerFactoryBean schedulerFactoryBean) {scheduler = schedulerFactoryBean.getScheduler();return scheduler;}/*** 读取Quartz的配置文件配置* 给 schedulerFactory 方法用** @return Properties* @throws Exception*/@Beanpublic Properties quartzProperties() throws Exception {PropertiesFactoryBean factory = new PropertiesFactoryBean();factory.setLocation(new ClassPathResource("/application.yml"));factory.afterPropertiesSet();return factory.getObject();}/*** 配置调度器参数** @return SchedulerFactoryBean* @throws Exception*/@Beanpublic SchedulerFactoryBean schedulerFactoryBean(DynamicRoutingDataSource dataSource) throws Exception {// 创建调度器工厂BeanSchedulerFactoryBean factory = new SchedulerFactoryBean();// 【重要】设置调度器实例名称(集群环境中用于标识)factory.setSchedulerName("Cluster_Quartz_Scheduler");// 【关键】设置Quartz使用的数据源(需与quartz.properties中配置一致)// 注意:这里从动态数据源中获取名为"quartz"的特定数据源factory.setDataSource(dataSource.getDataSource("quartz"));// 设置Spring应用上下文在Job中的key// 这样在Job实现类中可以通过此key获取Spring上下文factory.setApplicationContextSchedulerContextKey("applicationContext");// 加载Quartz配置属性(从application.yml中读取)factory.setQuartzProperties(quartzProperties());// 【线程池配置】设置自定义线程池// 注意:如果同时配置了quartz.properties中的线程池,可能会有冲突factory.setTaskExecutor(null);// 【启动控制】是否自动启动调度器(默认true)// 设为false时需要手动调用start()方法factory.setAutoStartup(true);// 【关键】应用关闭时是否等待任务完成// true:优雅停机,会等待正在执行的任务完成// false:立即停止,可能中断正在执行的任务factory.setWaitForJobsToCompleteOnShutdown(true);// 【重要】是否覆盖已存在的Job定义// true:启动时覆盖同名的Job/Trigger定义// false:发现同名Job时会抛出异常factory.setOverwriteExistingJobs(true);// 【建议】添加以下额外配置(根据需求):// factory.setStartupDelay(10); // 延迟N秒启动(给应用留出初始化时间)// factory.setExposeSchedulerInRepository(true); // 集群环境下需要暴露return factory;}}

测试添加任务及启动触发
1.任务

package com.quartz.demo.bootquartz.job;import org.quartz.*;import java.util.Date;/*** @ClassName QuartzJob* @Description 任务1* @Author LiuJiWei* @Date 2025/3/26 星期三* @Version 1.0*/
@PersistJobDataAfterExecution  // 持久化jobMapData
@DisallowConcurrentExecution   // 禁止任务并发执行
public class QuartzJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {try {System.out.println("======================Quartz Job executed=============================");System.out.println(context.getScheduler().getSchedulerInstanceId());System.out.println("任务名称:" + context.getJobDetail().getKey().getName());System.out.println("执行时间:" + new Date());System.out.println("======================Quartz Job end=============================");} catch (Exception e) {e.printStackTrace();}}}

2.项目启动则触发
 

package com.quartz.demo.bootquartz.trigger;import com.quartz.demo.bootquartz.job.QuartzJob;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;/*** @ClassName BootTrigger* @Description 任务启动器* @Author LiuJiWei* @Date 2025/3/26 星期三* @Version 1.0*/
@Component
public class BootTrigger implements ApplicationListener<ContextRefreshedEvent> {@Autowiredprivate Scheduler scheduler;@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {// 定义触发器TriggerKey triggerKey = TriggerKey.triggerKey("bootTriggerKey", "bootTriggerGroup");try {// 调度器中获取触发器,如果没有则新建一个触发器Trigger trigger = scheduler.getTrigger(triggerKey);if (trigger == null) {trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();// 定义要执行的任务JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity("QuartzJobKey", "QuartzJobGroup").build();// 传入调度器并开始执行任务scheduler.scheduleJob(jobDetail, trigger);scheduler.start();}} catch (SchedulerException e) {throw new RuntimeException(e);}}}

3.启动项目

2025-03-27 08:57:02.490  INFO 10536 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 10086 (http) with context path ''
2025-03-27 08:57:02.491  INFO 10536 --- [           main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
2025-03-27 08:57:02.515  INFO 10536 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : Freed 0 triggers from 'acquired' / 'blocked' state.
2025-03-27 08:57:02.520  INFO 10536 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : Handling 1 trigger(s) that missed their scheduled fire-time.
2025-03-27 08:57:02.548  INFO 10536 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : Recovering 0 jobs that were in-progress at the time of the last shut-down.
2025-03-27 08:57:02.548  INFO 10536 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : Recovery complete.
2025-03-27 08:57:02.550  INFO 10536 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : Removed 0 'complete' triggers.
2025-03-27 08:57:02.551  INFO 10536 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : Removed 0 stale fired job entries.
2025-03-27 08:57:02.555  INFO 10536 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler Cluster_Quartz_Scheduler_$_NON_CLUSTERED started.
2025-03-27 08:57:02.568  INFO 10536 --- [           main] com.quartz.demo.QuartzDemoApplication    : Started QuartzDemoApplication in 2.839 seconds (JVM running for 3.393)
======================Quartz Job executed=============================
NON_CLUSTERED
任务名称:QuartzJobKey
执行时间:Thu Mar 27 08:57:02 CST 2025
======================Quartz Job end=============================
======================Quartz Job executed=============================
NON_CLUSTERED
任务名称:QuartzJobKey
执行时间:Thu Mar 27 08:57:05 CST 2025
======================Quartz Job end=============================
======================Quartz Job executed=============================
NON_CLUSTERED
任务名称:QuartzJobKey
执行时间:Thu Mar 27 08:57:10 CST 2025
======================Quartz Job end=============================

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com