要在现有的代码中添加一个新的定时任务,你可以按照以下步骤进行:
定义新的命令类:创建一个新的类,实现 Command 接口。
将新命令添加到 commandMap:在 ProjectCommandLineRunner 中将新命令注册到命令映射中。
以下是具体的代码示例:
1. 新命令类
假设我们要新增一个命令 GenerateReportCommand,代码如下:
java
复制
@Component
@Slf4j
public class GenerateReportCommand implements Command {
@Override
public int execute(String... args) {
try {
// 生成报告的业务逻辑
log.info("Report generated successfully");
return 0;
} catch (Exception e) {
log.error("Error generating report", e);
return -1;
}
}
}
2. 更新 ProjectCommandLineRunner
在 ProjectCommandLineRunner 中,注入新命令并注册到 commandMap:
java
复制
@Component
@Slf4j
public class ProjectCommandLineRunner implements CommandLineRunner {
Map<String, Command> commandMap = new HashMap<>();
@Autowired
private SendEmailCommand sendEmailCommand;
@Autowired
private GenerateReportCommand generateReportCommand; // 新的命令
@PostConstruct
private void init() {
commandMap.put("sendEmail", sendEmailCommand);
commandMap.put("generateReport", generateReportCommand); // 注册新命令
}
@Override
public void run(String... args) throws Exception {
if (args.length == 0) {
return;
}
if (!commandMap.containsKey(args[0])) {
log.error("'{}' command not found", args[0]);
System.exit(-1);
}
Command command = commandMap.get(args[0]);
String[] arguments = Arrays.copyOfRange(args, 1, args.length);
System.exit(command.execute(arguments));
}
}
总结
通过以上步骤,你可以轻松地新增定时任务。只需创建实现 Command 接口的新类,并在 ProjectCommandLineRunner 中注册该命令,即可扩展现有的命令功能。这样设计使得代码具有良好的可扩展性。
拥抱Kubernetes,再见了,SpringBoot cronjob项目开发中总是需要执行一些定时任务,比如定时处理数据之后发送邮件,定时更新缓存等等。 Java定时任务 基于 java.util.Timer 定时器,实现类似闹钟的定时任务 ...