温馨提示×

linux java如何定时任务

小樊
37
2026-10-24 09:03:49
栏目: 编程语言

在 Linux 上用 Java 实现“定时任务”,常见有 几种方式,按使用场景从简单到生产级给你梳理一下。


一、Java 自带方式(代码内定时)

1️⃣ Timer + TimerTask(最简单,不推荐生产)

import java.util.Timer;
import java.util.TimerTask;

public class Test {
    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行任务:" + new java.util.Date());
            }
        }, 0, 5000); // 延迟0ms,每5秒执行
    }
}

✅ 简单
❌ 单线程、异常会停止、不适合复杂调度


2️⃣ ScheduledExecutorService(推荐 Java 代码定时)

import java.util.concurrent.*;

public class Test {
    public public static void main(String[] args) {
        ScheduledExecutorService executor =
                Executors.newScheduledThreadPool(2);

        executor.scheduleAtFixedRate(() -> {
            System.out.println("任务执行:" + new java.util.Date());
        }, 0, 5, TimeUnit.SECONDS);
    }
}

✅ 线程安全
✅ 可控线程池
✅ 常用


3️⃣ Spring / Spring Boot 定时任务(最常用)

开启定时

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

定时方法

@Component
public class Job {

    @Scheduled(cron = "0 */1 * * * ?") // 每分钟
    public void run() {
        System.out.println("Spring 定时任务");
    }
}

✅ 生产最常用
✅ 支持 cron、fixedRate、fixedDelay


二、Linux 系统级定时(Java 程序作为脚本)

4️⃣ crontab + Java(非常推荐)

适合:每天固定时间跑一次

1. 打包 Java 程序

javac Task.java
jar cvf task.jar Task.class

2. 写 shell 脚本

#!/bin/bash
java -jar /opt/java/task.jar >> /var/log/task.log 2>&1

3. 加入 crontab

crontab -e
0 2 * * * /opt/java/run.sh

✅ 稳定
✅ 不占内存
✅ 运维友好


三、专业任务调度(分布式)

5️⃣ Quartz(复杂调度)

JobDetail job = JobBuilder.newJob(MyJob.class).build();
Trigger trigger = TriggerBuilder.newTrigger()
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?"))
        .build();

✅ 支持集群
✅ 持久化
❌ 较重


6️⃣ XXL-JOB / Elastic-Job(互联网公司常用)

✅ 可视化
✅ 分布式
✅ 高可用


四、怎么选?

场景 推荐方案
简单测试 Timer
Java 内部定时 ScheduledExecutor
Spring 项目 @Scheduled
每天跑脚本 crontab
分布式任务 XXL-JOB / Quartz

如果你能告诉我:

  • 是 Spring Boot 还是普通 Java
  • 是 每分钟 / 每天 / 实时
  • 是否 单机还是集群

我可以直接给你 完整可运行示例。

0 踩