主要问题
我正在编写一个应用程序(可在 GitHub 上获得- 构建/运行说明如下),它会抓取日志文件并对写入日志的某些事件做出反应(在这种情况下,向 REST API 发出 HTTP 请求)。我选择了 Java、Spring Boot 2.x、Apache Tailer和OpenFeign作为实现这一目标的主要工具。
我怀疑我不了解 Apache Tailer 及其在后台执行的线程如何工作,或者如何在 Spring Boot 应用程序中正确利用它。Tailer
在 Spring Boot 应用程序的上下文中初始化和运行 a 的正确方法是什么?
附加信息
为了测试这一点,我在本地启动应用程序,并通过 shell 将文本行回显到给定的日志文件中。在撰写本文时(提交1fed906),当我运行该应用程序时,似乎:
Tailer 初始化(我可以看到
TailerListenerAdapter.init()
在TailerListenerAdapter
我构建它时调用)Tailer 运行(我看到我写到它监视传递到的日志文件的所有内容
TailerListenerAdapter.handle()
)。
一旦我在日志中写了一些东西,我的 TailerListenerAdapter 知道它应该做出反应,它看起来就像控制从Tailer.run()
方法调用中退出,并且应用程序退出(优雅地)。我希望它继续运行并跟踪日志,直到我停止应用程序。
我不确定Tailer.run()
在这种情况下在哪里调用,所以我@PostConstruct
在自定义 Tailer 子类中的一个方法中使用了它。我以前从未使用@PostConstruct
过,所以我不能 100% 确定我是否正确使用它,或者是否有更好的地方放置它以确保run()
在启动时调用它同时还允许我注入我的所有配置-file / bean 驱动选项。
构建/运行说明
- 克隆项目
在 shell 中运行它:
mvn spring-boot:run -Dspring-boot.run.arguments=--tailer.logFile=/path/to/any/test.log,--logging.level.com.github.ubunfu.mclogbot=DEBUG
或者
在 IDE 中设置等效的运行配置。有一个 application-local.yml Spring Boot 配置文件,其中包含指定测试日志文件路径的位置。在 IntelliJ 中,使用以下内容设置 Maven 运行配置
Command Line
:spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=local