概述这篇文章出现的原因是为客户应用程序中需要添加一项新功能,使其可以随时处理复制到目录中的文件。监控目录是否变更是许多计算机系统和应用程序中的一项常见任务。在 Java 生态系统中,有不同的选项可用于执行此类任务。下面列出了几种可能的解决方案:
Java WatchService API:它是在 Java 7 中引入的一个比较低级的特性。Apache commons io:软件包监控器提供了一个用于监控文件系统事件的组件。Spring Integration's file support:这是 Spring 集成项目的一部分,该项目支持多种企业集成模式。Spring Boot 开发者工具中的 Filewatch 包:它允许监视本地文件系统的更改。
我们将选择第四种实现方式,因为它和spring集成,很容易实现。
用例我们希望通过将 csv 文件复制到特定位置,在应用程序中创建新客户。文件完全传输后将被读取。然后,csv 文件将被验证、处理并移动到目标目录。以下是 csv 文件的示例:
java复制代码csv 文件将始终包含标题行和按特定顺序排列的 5 列。
准备工作该项目采用了以下技术:
Java 21Spring Boot 3.1.5Maven 3.9.1
您至少需要 java 17+、Spring Boot 3+ 和 Maven 3.8+ 来运行源代码。
依赖关系必须将一种新的依赖项添加到 pom.xml 文件中才能导入必要的类。
xml复制代码这就是我们需要先准备好或者掌握的东西
监控目录用于监视特定目录的文件更改的类是 FileSystemWatcher。它带有三个构造函数,但您很可能会使用接受三个参数的构造函数
java复制代码让我们看一下每个参数
deamon:是否有一个守护线程监视变化。如果您希望在 jvm 停止时终止线程(监控),请将其设置为 true。pollInterval:再次检查更改之间等待的时间。QuietPeriod:确保检测到更改后等待的时间。如果您将大文件传输到该目录,则必须考虑这一点以避免文件损坏。
由于我们希望在不影响源代码的情况下更改上述所有参数值,因此将自定义属性添加到 application.properties 文件中
ini复制代码应用程序将每 5 分钟扫描一次目录是否有修改。如果更改将在 1 分钟后触发。这已