如何定制spring中@Scheduled
注释的异常处理?
我有Cron作业,这些作业将在服务器(Tomcat 6)中触发,当出现任何异常时,我需要进行一些处理。
为什么不包装您的业务逻辑,在@schedule方法中做一个简单的try-catch呢。然后,您可以记录或采取任何必要的措施来应对失败案例。
@Scheduled(cron = "${schedulerRate}")
public void scheduledJob() {
try {
businessLogicService.doBusinessLogic();
} catch (Exception e) {
log.error(e);
}
}
您可以为ThreadPoolTaskScheduler
实现并注册一个ErrorHandler
,该调度器用于调度注释。
<task:annotation-driven scheduler="yourThreadPoolTaskScheduler" />
<bean id="yourThreadPoolTaskScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
<property name="poolSize" value="5" />
<property name="errorHandler" ref="yourScheduledTaskErrorHandler" />
</bean>
<bean id="yourScheduledTaskErrorHandler"
class="com.example.YourScheduledTaskErrorHandler"/>
如果你想使用Java配置,你需要创建配置来实现SchedulingConfigurer
@EnableScheduling
@Configuration
class SchedulingConfiguration implements SchedulingConfigurer {
private final Logger logger = LoggerFactory.getLogger(getClass());
private final ThreadPoolTaskScheduler taskScheduler;
SchedulingConfiguration() {
taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setErrorHandler(t -> logger.error("Exception in @Scheduled task. ", t));
taskScheduler.setThreadNamePrefix("@scheduled-");
taskScheduler.initialize();
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskScheduler);
}
}
您可以根据需要修改错误处理程序。这里我只记录一条消息。
别忘了给taskScheduler打电话。初始化();。没有它,你会得到:
java.lang.IllegalStateException: ThreadPoolTaskScheduler not initialized
问题内容: 假设我有一个抛出某种Exception的方法。引发异常的代码位于访问外部服务的第三方库中。我有一些课程可以很好地处理外部服务,并且有很多异常处理程序可以处理潜在的问题。我遇到的问题是我可能有很多异常,但是如果有一个动作,并且可能有大量尝试/捕获块,我可能只需要执行几个动作之一。异常的类型甚至可能不相关,或者不同的方法可能会抛出相同类型的异常,但是根据抛出该异常的方法,需要采取不同的操作
我一直在研究ControllerAdvice和ExceptionHandler注释,但我认为这两个注释都不能按照我们的预期使用。ControllerAdvice只能覆盖整个控制器,因此任何异常处理也将覆盖非Ajax方法。类似地,ExceptionHandler注释将处理来自这两种类型方法的异常。 目前的想法是将ajax和CRUD这两种类型的方法拆分为单独的控制器。还有别的办法吗?
我有两个映射到OneToMany、ManyToOne的类,我得到了异常: org.hibernate.annotationException:mappedBy引用了一个未知的目标实体属性:entity_package.ticketentity.ownerEntity in entity_package.userentity.ownedTickets 公共类TicketEntity实现可序列化{ 怎
我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?
我想在hibernate中进行一对多映射,但它显示出异常,我尝试了很多,但找不到解决方案 我有下面两张桌子 deptno--数字主键dname--varchar2(10) loc--varchar2(10) empno--数字主键 用户名--varchar2(10) deptno--数字(10)外键 当我没有在Dept.java类上添加@Entity注释时,我会在stacktrace下面看到 当我
在我的Spring Boot(1.4.2版)应用程序中,我有很多计划的任务,希望使用一个处理程序捕获所有异常,就像使用@ExceptionHandler注释的普通控制器一样。由于线程问题,这种方法不适用于使用@Scheduled annotation定义的任务: @ExceptionHandler不适用于@计划方法(事实证明它并不意味着)。相反,Spring Boot使用它自己的LoggingEr