我不想在Spring写Spring Boot 应用程序,这将是在Windows中的监控目录,当我改变子文件夹或添加新的或删除现有的一个,我想得到有关的信息。
我怎么能这么做呢?我读过这篇文章:http://docs.spring.io/spring-integration/reference/html/files.html和每个结果下的'Spring文件观察员'在谷歌,但我找不到解决方案...
你有这样的好文章或例子吗?我不希望它像这样:
@SpringBootApplication
@EnableIntegration
public class SpringApp{
public static void main(String[] args) {
SpringApplication.run(SpringApp.class, args);
}
@Bean
public WatchService watcherService() {
...//define WatchService here
}
}
问候
8条答案
按热度按时间wlsrxk511#
spring-boot-devtools
具有FileSystemWatcher
文件监视器配置
我的文件更改监听器
yeotifhr2#
从Java 7开始,WatchService将是最好的解决方案。
Spring配置可能如下所示:
以及用于启动监控自身的Bean:
此外,您必须为应用程序类设置
@EnableAsync
(it配置)。并从
application.yml
中截取:监控文件夹:C:\用户\目录
使用 Spring Boot
2.3.1
进行测试。还使用了异步池的配置:
其中,自定义异步异常处理程序为:
属性文件中的配置:
其中
AsyncProperties
:为了使用异步执行,我正在处理如下事件:
其中验证程序服务的外观如下所示:
主要思想是配置异步配置-〉从
MonitoringService
调用它-〉将@Async
注解放在您调用的另一个服务的方法上(它应该是另一个bean的方法-初始化通过代理)。c9qzyr3d3#
您可以使用纯java实现此功能,而不需要spring https://docs.oracle.com/javase/tutorial/essential/io/notification.html
xtupzzrd4#
参见Spring Integration Samples Repo,在“基本”下有一个文件示例。
在应用程序
file-split-ftp
下有一个更新和更复杂的示例-它使用Sping Boot 和Java配置,而不是旧示例中使用的xml。cwdobuhd5#
找到了一个变通方法,可以按
@Scheduled(fixedDelay = Long.MAX_VALUE)
注解任务你可以检查代码:
of1yzvn46#
这里没有给出细节,一些可能会帮助您解决问题的提示。
你可以从Sławomir Czaja的回答中得到目录
WatchService
的代码:您可以使用纯java实现此功能,而不需要spring https://docs.oracle.com/javase/tutorial/essential/io/notification.html
并将该代码 Package 成一个可运行的任务。该任务可以使用
SimpMessagingTemplate
通知您的客户端目录更改,如下所述:Web套接字STOMP句柄发送然后,您可以创建如下所述的调度程序:处理任务的开始和重复的调度。
别忘了在mvc-config中配置调度和websocket支持,以及在客户端配置STOMP支持(进一步阅读:STOMP over Websocket)
v9tzhpje7#
Apache commons-io是另一个监视文件/目录更改的好方法。
您可以在下面的答案中看到使用它的利弊概述:https://stackoverflow.com/a/41013350/16470819
lfapxunr8#
以防万一,如果有人正在寻找递归子文件夹监视器,这个链接可能会有帮助:How to watch a folder and subfolders for changes