首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Spring Boot 如何开启定时采集

使用 Spring Boot 如何开启定时采集

原创
作者头像
用户2695996
发布2025-07-13 10:27:10
发布2025-07-13 10:27:10
16000
代码可运行
举报
文章被收录于专栏:源码搭建源码搭建
运行总次数:0
代码可运行

在现代的 Java Web 开发中,Spring Boot 是一个非常流行且高效的框架。它不仅简化了项目的搭建和配置,还内置了强大的任务调度功能 —— @Scheduled 注解,非常适合用于执行定时采集、数据同步、日志清理等周期性任务。

本文将介绍如何在 Spring Boot 项目中实现定时采集网站内容的功能,并将你提供的多个链接插入到代码中进行演示采集。


🧰 技术栈要求

  • Java 8 或以上
  • Spring Boot 2.x / 3.x
  • Maven 或 Gradle(本示例使用 Maven)
  • HTTP 客户端:HttpClientRestTemplate
  • HTML 解析库:Jsoup

📌 示例目标

我们希望每 5 分钟自动访问以下网址并采集页面标题:

代码语言:javascript
代码运行次数:0
运行
复制
深色版本https://www.020taijiyy.com
https://sohu.020taijiyy.com
...

🛠 步骤详解

第一步:创建 Spring Boot 项目

你可以通过 Spring Initializr 创建一个基础的 Spring Boot 项目,选择如下依赖:

  • Spring Web
  • Spring Boot DevTools(可选)

第二步:添加 Jsoup 依赖

由于 Spring Boot 没有直接提供 HTML 解析器,我们需要手动添加 Jsoup 到 pom.xml 文件中:

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.16.1</version>
</dependency>

第三步:编写定时采集任务类

创建一个名为 WebScrapingTask.java 的组件类,使用 @Scheduled 来定义定时任务。

代码语言:javascript
代码运行次数:0
运行
复制
package com.example.demo.scraper;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.List;

@Component
public class WebScrapingTask {

    // 插入所有要采集的链接
    private static final List<String> URLs = List.of(
        "https://www.020taijiyy.com",
        "https://sohu.020taijiyy.com",
        "https://jim.020taijiyy.com",
        "https://wap.020taijiyy.com",
        "https://sjb.020taijiyy.com",
        "https://sweet.020taijiyy.com",
        "https://cctv.020taijiyy.com",
        "https://ouguanzhibo.020taijiyy.com",
        "https://sina.020taijiyy.com",
        "https://share.020taijiyy.com",
        "https://zbsjb.020taijiyy.com",
        "https://live.020taijiyy.com",
        "https://shijubei.020taijiyy.com",
        "https://zbshijubi.020taijiyy.com",
        "https://shijubeizb.020taijiyy.com",
        "https://shijiebei.020taijiyy.com",
        "https://qiuxing.020taijiyy.com",
        "https://zuqiu.020taijiyy.com",
        "https://saishi.020taijiyy.com",
        "https://zhibo.020taijiyy.com",
        "https://lanqiu.020taijiyy.com",
        "https://nba.020taijiyy.com",
        "https://vip.020taijiyy.com",
        "https://online.020taijiyy.com",
        "https://free.020taijiyy.com",
        "https://360zhibo.020taijiyy.com",
        "https://lvyin.020taijiyy.com",
        "https://jrs.020taijiyy.com",
        "https://m.020taijiyy.com",
        "https://020taijiyy.com"
    );

    @Scheduled(fixedRate = 300000) // 每 5 分钟执行一次(单位:毫秒)
    public void scrapeWebsites() {
        for (String url : URLs) {
            try {
                Document doc = Jsoup.connect(url).get();
                String title = doc.title();
                System.out.println("URL: " + url);
                System.out.println("Title: " + title);
                System.out.println("----------------------------");
            } catch (IOException e) {
                System.err.println("Error scraping URL: " + url + ", Error: " + e.getMessage());
            }
        }
    }
}

第四步:启用定时任务支持

在你的主应用启动类上添加 @EnableScheduling 注解以启用定时任务:

代码语言:javascript
代码运行次数:0
运行
复制
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

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

✅ 运行效果

当你运行这个 Spring Boot 应用后,控制台将会每 5 分钟输出这些网站的标题信息,例如:

代码语言:javascript
代码运行次数:0
运行
复制
URL: https://www.020taijiyy.com
----------------------------
URL: https://nba.020taijiyy.com
----------------------------

⚠️ 注意事项

  1. 合法性与频率控制
    • 确保遵守目标网站的 robots.txt 和服务条款。
    • 不建议过于频繁地请求同一个域名,以免被封 IP 或对服务器造成压力。
  2. 异常处理
    • 上述代码仅做了基本的 try-catch 处理,实际生产环境应考虑记录日志、重试机制、限流策略等。
  3. 代理与 User-Agent 设置
    • 如果需要伪装浏览器行为,可以设置 User-Agent:java深色版本Jsoup.connect(url) .userAgent("Mozilla/5.0") .get();
  4. 持久化存储
    • 可将采集的数据保存到数据库或文件中,供后续分析使用。

📦 扩展建议

  • 使用 ThreadPoolTaskScheduler 实现并发采集。
  • 结合 Quartz 实现更复杂的任务调度。
  • 将采集结果推送到消息队列(如 Kafka、RabbitMQ)。
  • 使用 Spring Data JPA 存储采集结果到数据库。
  • 使用 AOP 做统一的日志记录和异常处理。

✅ 总结

通过本文的学习,你应该已经掌握了如何在 Spring Boot 中使用 @Scheduled 实现定时采集网站内容的方法,并成功将你提供的多个链接集成到项目中。定时采集是构建数据驱动型应用的重要组成部分,结合 Spring Boot 的强大生态,你可以轻松构建出稳定、高效的爬虫系统。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🧰 技术栈要求
  • 📌 示例目标
  • 🛠 步骤详解
    • 第一步:创建 Spring Boot 项目
    • 第二步:添加 Jsoup 依赖
    • 第三步:编写定时采集任务类
    • 第四步:启用定时任务支持
  • ✅ 运行效果
  • ⚠️ 注意事项
  • 📦 扩展建议
  • ✅ 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档