java常见面试题杂记
Spring相关
SpringBoot自动装配问题
定时器相关
Quartz框架
简介:Quartz是由OpenSymphony组织开发的开源Java任务调度框架,支持与J2EE/J2SE应用程序集成,用于创建复杂任务调度系统。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。
使用:Spring是整合了Quartz框架,需要在pom文件中添加spring-boot-starter-quartz依赖。
核心功能
任务调度:支持基于时间间隔(如每天、每小时)或Cron表达式(如"0 0 12 * *"表示每天中午12点执行)的灵活调度。
分布式处理:通过集群支持多节点负载均衡,确保高可用性。
持久化存储:可将任务信息持久化至数据库,重启后自动恢复状态。
监听器机制:支持任务执行前后的日志记录、通知触发等扩展功能。
核心组件
1)任务Job(接口):即想要调用的任务类,需要实现org.quartz.job接口,并重写execute()方法,任务调度时会执行execute()方法。(最新版本继承QuartzJobBean类,重写executeInternal方法)
2)触发器Trigger(接口):即执行任务的触发器,当满足什么条件时会去执行你的任务Job,主要分为根据时长间隔执行的SimpleTrigger和根据日历执行的CronTrigger。
3)调度器Scheduler(接口):即将Trigger和Job绑定之后,根据Trigger中的设定,负责进行Job调度的组件。
代码示例:HelloJob类实现了Job接口重写了execute()方法
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger")//cron表达式 这里定义的是4月16日早上9点21分开始执行.withSchedule(CronScheduleBuilder.cronSchedule("0 21 9 16 4 ? *")).build();SchedulerFactory factory = new StdSchedulerFactory();//创建调度器Scheduler scheduler = factory.getScheduler();//启动调度器scheduler.start();//jobDetail和trigger加入调度scheduler.scheduleJob(jobDetail, trigger);