如何在Spring-Boot的单个项目中同时使用WatchService(NIO包)和@Scheduled?



我已经写了一个脚本,而我有一个调度类,在每个特定时间间隔和另一个类别中都可以在任何新文件中不断地观看文件夹的其他类。而且这两个工作(Schedular WatchService(必须无尽。

,但他们没有同时称为。

由 - @scheduled&称为调整类@componentscan(basepackages =" com.project.schedular"(

通过 - @postConstruct在方法上调用WatchService

已经尝试将@postConstruct放在这两个方面,并将两个软件包放入@componentscan({" com.project.schedular"," com.project.watcher"}((还尝试将@Async放在这两种方法上。

主类:

@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages = "com.aprstc.schedular")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
@Component
public class SchedularClass {
    @PostConstruct
    @Scheduled(fixedRate = 30000)
    public void execute() {
//logic of scheduling method
}

观察者类:

@Component
public class WaybillReadScript {
@PostConstruct
    public void watchFolder() throws InterruptedException, IOException {
        System.out.println("Into the watch Folder.");
        WatchService watchService = FileSystems.getDefault().newWatchService();
        System.out.println(2);
        Path path = Paths.get("/home/mypc-630/Work/abc");
        System.out.println(3);
        try {
            path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
        } catch (IOException e) {
            e.printStackTrace();
        }
        WatchKey key;
        while ((key = watchService.take()) != null) {
            for (WatchEvent<?> event : key.pollEvents()) {
                if (event.context().toString().equalsIgnoreCase("wbill.txt"))
                    processWaybillFile();
            }
            key.reset();
        }
    }
}

我希望这两个类都必须同时运行。观察者必须持续观看。调度程序必须执行连续的计划作业。

我认为邮政编码是错误的地方。邮政编码用于初始化您的豆/组件。而且,如果您使用watchService.take((进行阻止调用,那么将永远不会留下此后构造,如果不是所有的bean都完全创建的bean都不会启动。

相关内容

  • 没有找到相关文章

最新更新