一颗小白菜的定时任务学习记录(自用持续更新)

昨天面试被人问到定时任务,当时理解成批处理了,现在想来不是很准确。但是接触到的定时任务这块也就批处理用到了。既然定时任务作为一个项目中比较重要的部分,那就拿出开研究一下。
入门:
1.jdk有API可以实现定时任务。
1)创建任务类,集成TimerTask接口,重写run()方法。要完成的任务就写到run中即可。

public class MyTask extends TimerTask {
	@Override
	public void run() {
		System.out.println("现在是北京时间:"+new Date());
	}
}

2)创建main()方法测试。
在这里插入图片描述
我这里是实现每两秒间隔打印一次系统时间功能。
2.使用quartz实现定时任务。
1)导入相关依赖
这个破教程说话不说全,第二个不导入会导致继承QuartzJobBean时找不到这个类。

<dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz</artifactId>
          <version>2.2.2</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>4.3.17.RELEASE</version>
      </dependency>

2)编写task类方法,继承QuartzJobBean类,重写相关方法。

public class Job1 extends QuartzJobBean {

	@Override
	protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
		System.out.println("现在是北京时间:"+new Date());
	}
}

3)在配置文件中配置

<bean id="job1" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="com.scbg.quartzz.Job1"/>
        <property name="jobDataAsMap">
            <map>
                <entry key="timeout" value="0"/>
            </map>
        </property>
    </bean>
    <!--Trigger配置启动参数-->
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="job1"/>
        <property name="startDelay" value="0"/>
        <property name="repeatInterval" value="2000"/>
    </bean>
    <!--SchedulerFactoryBean-->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>

报错:Caused by: java.lang.ClassNotFoundException: org.springframework.transaction.TransactionException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 41 more
不知道为啥需要事务的,人家报错缺那就加呗

<!--<dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>4.3.17.RELEASE</version>
      </dependency>-->

3)结果出来了,不知道为啥@Test测试不行,写了main函数测试就没毛病。。。。
在这里插入图片描述
4)使用quartz比较方便的地方在于

 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="job1"/>
        <property name="cronExpression" value="0 0 12 * *"/><!--每天中午十二点运行一次-->
    </bean>
``
完犊子,这个老师讲到一半开始卖课,没有继续学下去。
首先,定时任务不适合多线程处理。如果quartz集群处理业务,就需要一个调度者。`其利用数据库的读锁,保证不发生重复任务。一般应用于比较核心的业务,通常由架构师完成。


 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值