Spring的长期服务?

 大佬銘銘銘銘銘 发布于 2023-02-10 09:01

我想在我的Spring应用程序中提供一个服务,该服务使用Java 7 WatchService监视目录中的更改。想法是,当目录中的文件更改时,将通知通过WebSockets连接的客户端。

我如何使bean在其自己的线程中作为服务运行?

1 个回答
  • 您正在寻找的是异步执行。使用正确配置的上下文(请参阅链接),您可以像这样声明一个类

    @Component
    public class AsyncWatchServiceExecutor {
        @Autowired
        private WatchService watchService; // or create a new one here instead of injecting one
    
        @Async
        public void someAsyncMethod() {
            for (;;) {
                // use WatchService
            }
        }
    }
    

    您所做的一切都someAsyncMethod()将在单独的线程中发生。您所要做的就是调用一次。

    ApplicationContext context = ...; // get ApplicationContext
    context.getBean(AsyncWatchServiceExecutor.class).someAsyncMethod();
    

    使用WatchService如描述Oracle文档。


    如果您没有直接访问的权限ApplicationContext,则可以将Bean注入到其他Bean中,并在@PostConstruct方法中调用它。

    @Component
    public class AsyncInitializer {
        @Autowired
        private AsyncWatchServiceExecutor exec;
    
        @PostConstruct
        public void init() {
            exec.someAsyncMethod();
        }
    }
    

    小心使用哪种代理策略(JDK或CGLIB)。

    2023-02-10 09:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有