spring 异常捕获异常_跟踪异常–第5部分–使用Spring进行计划

spring 异常捕获异常

屏幕快照2014-04-21 at 12.12.34 看来我终于快要结束本系列有关使用Spring进行错误跟踪的博客了,对于那些还没有阅读该系列博客的人,我正在编写一个简单但几乎具有工业实力的Spring应用程序,扫描日志文件中的异常,然后生成报告。 在本系列的第一个博客中,这些是我的最初要求:

  1. 搜索给定目录及其子目录(可能)以查找特定类型的文件。
  2. 如果找到文件,则检查其日期:是否需要搜索文件以查找错误?
  3. 如果文件足够年轻以至于无法检查,则对其进行验证,以查找异常。
  4. 如果它包含例外,是我们正在寻找的例外还是被排除在外?
  5. 如果它包含我们所需要的例外类型,则将详细信息添加到报告中。
  6. 检查完所有文件后,格式化报告以准备发布。
  7. 使用电子邮件或其他技术发布报告。
  8. 整个过程每天都会在给定的时间运行

该博客介绍了满足要求8的情况: “整个事情每天都会在给定的时间运行” ,这意味着实施某种调度。

现在,Java已经存在了很长时间,这意味着有许多调度任务的方法。 这些范围包括:

  • 使用一个简单的线程并长时间sleep(...)
  • 使用TimerTimerTask对象。
  • 使用ScheduledExecutorService
  • 使用Spring的TaskExecutorTaskScheduler类。
  • 使用Spring的@EnableScheduling@Scheduled注释(从Spring 3.1开始)。
  • 使用更专业的时间表。

调度程序的专业性更强,从Quartz (免费)到Obsidian (似乎更高级,但要花钱)。 如您所料,Spring包含了Quartz Scheduler支持。 实际上,有两种方法可以将Quartz Scheduler集成到您的Spring应用程序中,它们是:

  1. 使用JobDetailBean
  2. 使用MethodInvokingJobDetailFactoryBean

对于此应用程序,我将使用Spring的Quartz集成以及MethodInvokingJobDetailFactoryBean ; 原因是使用Quartz允许我使用cron表达式配置日程表,而MethodInvokingJobDetailFactoryBean可以快速,简单地使用几行XML进行配置。

Spring和Quartz使用的cron表示技术是从Unix的cron调度程序中毫不客气地采用 有关Quartz如何处理cron表达式的更多信息,请查看Quartz cron页面 如果您在创建自己的cron表达式时需要帮助,那么您会发现Cron Maker是一个非常有用的实用程序。

设置Spring和Quartz时,要做的第一件事是将以下依赖项包含到POM项目文件中:

<!-- QuartzJobBean is in spring-context-support.jar -->
          <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-context-support</artifactId>
               <version>${org.springframework-version}</version>
               <exclusions>
                    <!-- Exclude Commons Logging in favour of SLF4j -->
                    <exclusion>
                         <groupId>commons-logging</groupId>
                         <artifactId>commons-logging</artifactId>
                    </exclusion>
               </exclusions>
          </dependency>
          <!-- Spring + Quartz need transactions -->
          <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-tx</artifactId>
               <version>${org.springframework-version}</version>
          </dependency>
          <!-- Quartz framework -->
          <dependency>
               <groupId>org.quartz-scheduler</groupId>
               <artifactId>quartz</artifactId>
               <version>1.8.6</version>
               <!-- You can't use Quartz two with Spring 3 -->
          </dependency>

这很简单,最后只有一个很小的“ Gotcha” 。 首先,Spring的Quartz支持位于spring-context-support-3.2.7.RELEASE.jar (如果适用,请替换您的Spring版本号)。 其次,您还需要包括Spring事务库– spring-td-3.2.7.RELEASE.jar 。 最后,您需要包括一个Quartz调度程序版本; 但是,请小心,因为Spring 3.x和Quartz 2.x不能“开箱即用”地协同工作(尽管如果您四处看看,则可以找到临时修复程序)。 我使用的是Quartz 1.8.6版,它确实可以满足我的需要。

下一步要做的是整理XML配置,这涉及三个步骤:

  1. 创建一个MethodInvokingJobDetailFactoryBean的实例。 它具有两个属性:您要在预定的时间间隔调用的bean的名称,以及您要调用的bean上的方法的名称。
  2. 使用CronTriggerFactoryBeanMethodInvokingJobDetailFactoryBean耦合到cron表达式
  3. 最后,使用SchedulerFactoryBean调度整个caboodle

配置了这三个bean之后,您将获得一些类似于以下内容的XML:

<bean id="FileLocatorJob"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

          <property name="targetObject" ref="errorTrackService" />
          <property name="targetMethod" value="trackErrors" />

     </bean>

     <bean id="FileLocatorTrigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <property name="jobDetail" ref="FileLocatorJob" />
          <!-- run every morning at 2 AM -->
          <property name="cronExpression" value="${cron.expression}" />
     </bean>

     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
          <property name="triggers">
               <list>
                    <ref bean="FileLocatorTrigger" />
                    <!-- Add other triggers for other jobs (if any) here <ref bean="" /> -->
               </list>
          </property>
     </bean>

请注意,我在cron表达式中使用了占位符。 实际的cron表达式可以在app.properties文件中找到:

# run every morning at 2 AM 
cron.expression=0 0 2 * * ?

# Use this to test the app (every minute) 
#cron.expression=0 0/1 * * * ?

在这里,我有两种表达方式:一种将工作安排在每天凌晨2点运行,另一种被注释掉,每分钟运行一次。 这是该应用程序不完全具有工业实力的一个实例。 如果有一个“合适的”应用程序,那么我可能会在每个环境(DEV,UAT和生产等)中使用一组不同的属性。

释放此应用程序仅需几个步骤,而第一个步骤是创建可执行的JAR文件。 下次再说。

  1. 使用Spring跟踪应用程序异常
  2. 使用Spring跟踪异常–第2部分–委托模式
  3. 错误跟踪报告–第3部分–策略和软件包私有
  4. 跟踪异常–第4部分– Spring的邮件发件人

翻译自: https://www.javacodegeeks.com/2014/04/tracking-exceptions-part-5-scheduling-with-spring.html

spring 异常捕获异常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值