gpt4 book ai didi

java - 可以在运行时为 @Schedule 注释更改 ejb 参数吗?

转载 作者:太空狗 更新时间:2023-10-29 22:39:42 24 4
gpt4 key购买 nike

对于有 ejb 经验的人来说,这可能是个愚蠢的问题......

我想通过 @Schedule 注释为我的一个使用 Java EE 调度程序的 EJB bean 动态读取和更改分钟参数。有人知道如何在运行时执行此操作,而不是像下面这样在类中对其进行硬编码吗?如果我要以编程方式执行此操作,我仍然可以使用 @Schedule 注释吗?

 @Schedule(dayOfWeek = "0-5", hour = "0/2", minute = "0/20", timezone = "America/Los_Angeles")
private void checkInventory() {
}

最佳答案

@Schedule 用于容器在部署期间创建的自动计时器。

另一方面,您可以使用 TimerService这允许您在运行时定义何时应调用 @Timeout 方法。

这可能是您的有趣 Material :The Java EE 6 Tutorial - Using the Timer Service .

编辑:只是为了让这个答案更完整。如果这是一个是否可能的问题,那么答案将是 - 是的,它是。

有一种方法可以“更改”使用@Schedule 创建的自动计时器的参数。尽管如此,它还是非常非凡 - 它取消了自动计时器并创建了一个类似的程序化计时器:

// Automatic timer - run every 5 seconds
// It's a automatic (@Schedule) and programmatic (@Timeout) timer timeout method
// at the same time (which is UNUSUAL)
@Schedule(hour = "*", minute = "*", second = "*/5")
@Timeout
public void myScheduler(Timer timer) {

// This might be checked basing on i.e. timer.getInfo().
firstSchedule = ...

if (!firstSchedule) {
// ordinary code for the scheduler
} else {

// Get actual schedule expression.
// It's the first invocation, so it's equal to the one in @Schedule(...)
ScheduleExpression expr = timer.getSchedule();

// Your new expression from now on
expr.second("*/7");

// timers is TimerService object injected using @Resource TimerService.

// Create new timer based on modified expression.
timers.createCalendarTimer(expr);

// Cancel the timer created with @Schedule annotation.
timer.cancel();
}
}

再一次 - 就个人而言,我永远不会使用这样的代码,也永远不想在真实的项目中看到这样的东西:-)要么计时器是:

  • automatic,由 @Schedule 通过对值进行硬编码或通过在 ejb-jar.xml 中定义它们来创建,
  • 程序化,由应用程序代码创建,在运行时可以有不同的值。

关于java - 可以在运行时为 @Schedule 注释更改 ejb 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8320055/

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