java - 强制子类将@Schedule添加到Java Spring中超抽象类中的方法
问题描述
我有一个超级抽象类,它有一些常见的实现方法和其他要由子类实现的抽象方法。一种常见的实现方法是注释为的方法@Scheduled
,但我希望子类定义应该如何定义这个计划(固定延迟、固定速率或 cron 等)。如何实施这种行为?
我想到的一种方法是覆盖要在子类中调度的方法,以便它只在超类中调用其相应的方法并在其上添加@Scheduled
所需的定义,但我不知道如何强制子类这样做是因为这种方法不是抽象的。
超抽象类
public abstract class SuperClass {
public abstract void x();
public void y() {
// Some implementation
}
// Method to be scheduled.
public void scheduledMethod() {
x();
y();
}
}
子类
public class Subclass extends SuperClass {
@Override
public void x() {
// Some implementation
}
// How to enforce the developer to add this ?
@Scheduled(cron = "0 0 0 * * ?")
public void scheduledMethod(){
super.scheduledMethod();
}
}
解决方案
我无法理解如何使用@Scheduled
,但是,我有一个替代方案:
- 在您的抽象类中,要求子类实现一个方法以返回时间表:
public String getCronString();
- 使用在您的子类中实现的方法使用调度程序以编程方式调度任务
getCronString()
,以返回 cron 调度。关于如何使用 Spring Boot 以编程方式安排任务的几个示例:
基本上,如果您的子类没有实现public String getCronString();
您的代码将无法编译。
推荐阅读
- java - 使用 JAR 文件中的静态变量
- asp.net - Automapper 和 System.ValueTuple 依赖/版本控制问题
- powershell - 如何使用修改后的日期处理 Powershell 或 Batch 提取文件列表
- python - 向数据框添加多列并跳过空值
- c# - 我可以在任务被取消之前处理 CancellationTokenSource 吗?
- php - 如何确保 mysqli 准备语句是正确的?
- objective-c - Obj-C UIDownpicker 将在滚动期间用另一个值填充另一个文本字段
- c# - 如何将类的实例分配为单独的副本(而不是引用)?
- java - java: 无法推断 MaxHeap<> 的类型参数
- javascript - 如何在 javaScript 中使用排列组合