我有一个 @Schedule 方法,我正在尝试调试,但没有被触发:
@Singleton
public class FileScheduler {
@EJB
private DaoFactory daoFactory;
@Schedule(persistent = false, minute = "1")
public void FilesSubmited() throws EmailException {
System.out.println("Init");
}
计划未激活的原因可能是什么?
您可能需要@Startup。如果您希望它每分钟运行一次,则表达式应为
"*/1"
(有关表达式的更多信息):
@Startup
@Singleton
public class FileScheduler {
@EJB
private DaoFactory daoFactory;
@Schedule(persistent = false, minute = "*/1")
public void FilesSubmited() throws EmailException {
System.out.println("Init");
}
}
如果单例使用
@Startup
注释进行注释,则 EJB 容器会在应用程序部署时启动单例会话 bean。
当我们将旧项目迁移到 Wildfly 27+ 上运行时,我遇到了这个问题。结果我们将所有 javax.* 命名空间迁移到 Jakarta EE 10,但没有删除 javax.javaee-api 库,也没有更改 @Startup/@Schedule 注释的导入。导入仍在工作并且可以构建项目,但 Wildfly 27+ 选择默默地忽略预定的方法而不给出任何提示。确保您使用 jakarta.ejb-api。