gpt4 book ai didi

java - @Scheduler 是否启动一个新线程?

转载 作者:行者123 更新时间:2023-11-30 03:59:50 24 4
gpt4 key购买 nike

我有一个 Spring 应用程序,它有几个预定方法

应用程序运行一段时间后,Lo4J 似乎停止滚动到新文件并增长到 10 GB。

所有配置看起来都很好,我只使用notepad++打开日志文件(意味着编辑器没有锁定日志文件)

所以我认为应用程序中可能有另一个线程正在运行。我不记得当前应用程序中的任何多线程实现。

那么是否有可能是@Scheduled方法导致了这个问题?

最佳答案

@Scheduled 导致代码在单独的线程中运行,不一定是新的,因为它可能来自线程池。

发生日志文件的非翻转是因为当 log4j 尝试重命名文件以进行翻转时,某些应用程序线程正在该精确时刻记录到该文件。

根据log4j滚动文件实现的代码RollingFileAppender ,当翻转时间到来时(调用 rollOver() 方法),将尝试重命名文件。

如果文件被锁定,则不会发生翻转,log4j 会继续使用同一文件,直到下次触发翻转策略并再次尝试重命名。

因此,@Scheduled 注释可能会导致此问题,但它可能不是唯一的原因,例如,如果是 Web 应用程序,则存在大量请求等。

要降低翻转失败的可能性,请尝试将 @Scheduled 线程更改为在与翻转时不同时刻运行尝试发生。

此外,将日志记录级别降低到ERROR也会降低翻转失败的可能性。另请参阅How to find which thread is locking a file .

关于java - @Scheduler 是否启动一个新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com