我正在使用 JSF 创建一个 Web 应用程序。
我有一个应用程序范围的 bean,它有一个无限循环,以便它定期执行一个动作。
我的问题是这个bean(由于无限循环)阻塞了整个应用程序。我认为 bean 会在自己的线程上运行。JSF 不就是这样,每个托管 bean 默认都在自己的线程上运行吗?
我应该创建一个线程并让无限循环在该线程中运行吗?
谢谢你
我正在使用 JSF 创建一个 Web 应用程序。
我有一个应用程序范围的 bean,它有一个无限循环,以便它定期执行一个动作。
我的问题是这个bean(由于无限循环)阻塞了整个应用程序。我认为 bean 会在自己的线程上运行。JSF 不就是这样,每个托管 bean 默认都在自己的线程上运行吗?
我应该创建一个线程并让无限循环在该线程中运行吗?
谢谢你
应用程序范围的 bean 是否在 JSF 中的单独线程上运行?
不,绝对不是。
我应该创建一个线程并让无限循环在该线程中运行吗?
不,你不应该。您应该只创建一个计划任务。最好的方法是使用@Singleton @Schedule
EJB。
@Singleton
public class SomeDailyJob {
@Schedule(hour="0", minute="0", second="0", persistent=false)
public void run() {
// Do your job here which should run daily at midnight.
}
}
就这样。无需额外配置手动弄乱线程。如果您想在 JSF 托管 bean 中访问其状态(如果有的话),只需使用@EJB
通常的方式注入即可。