我们需要在 Java Web 应用程序中定期运行一个函数。如何定期调用某个类的函数?当发生某些事件(例如服务器负载过高等)时,有什么方法可以调用函数。什么是 crontab ?那是定期工作吗?

有帮助吗?

解决方案

要定期调用的东西,请参阅的TimerTask

其他提示

如果你需要的东西更强大的,你可以使用石英

至于crontab是Unix机器调度工具。

有关调用方法时服务器具有高负载,则有至少两种可能的方法。你的应用服务器可能有,你会允许监视其运行情况,并采取行动progrommatic管理挂钩。 Alterntaively你有一些系统监控功能(例如的Tivoli或OpenView)配合并生成“事件”,它不应该太难实现这样的事件(例如)JMS消息,让你的服务器接他们回家。

然而,你可能想解释一点你想要达到的目标。自适应应用beahviour可能是相当棘手的权利。

如果您想定期运行的东西,不这样做的网络服务器。这将是非常错误的做法IMO。这是更好地使用cron相反,如果你是一个类Unix操作系统。 Windows服务器提供类似的功能。

  

我们需要周期性地运行一个函数   在Java Web应用程序

(1)所以,看在你的部署描述符(web.xml)中定义的监听器在启动时启动。

  

如何调用某些类的功能   周期性?

(2)创建定时器在该侦听器。

  

有没有通话功能的任何方式   当一些事件的发生,如高负载   在服务器等

(3)和运行一些线程来检查系统的条件是入店与Java,即使运行系统progs的(正常运行时间,等)和解析输出。

crontab中可能是一个办法,但Java的的执行将启动另一个JVM,这是真正的servlet容器热件事:在同一个JVM所有运行

不要忘记的java.util.concurrent - 它有很多的类调度,例如的ScheduledThreadPoolExecutor,如果你需要的不仅仅是一个简单的定时器等等。

HTTP:/ /java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

有也是它到Java 1.4的反向移植: http://backport-jsr166.sourceforge.net

如果你已经使用Spring,你可能想看看Spring的任务执行框架 - 使用@Scheduled和@Async的注释方法,如任务和实施的处理器代表实际工作的工人的功能,如在描述:

HTTP://博客.springsource.com / 2010/01/05 /任务调度简单化式 - 弹簧 - 3-0 /

的好处是,你可以在Spring上下文中使用的类似cron的语法定义定时器,你不需要任何特殊设置的任务,它也很好地集成到Java EE应用程序,并应与Web服务器发挥出色(其自定义线程倾向于不总是这样)。

如何定期调用某个类的函数?

有几种解决方案:A 定时器, ,一个 Java cron 实现,例如 cron4j, 石英, ,甚至是 EJB 定时器 API. 。选择其中之一很大程度上取决于上下文:应用程序类型、使用的技术、工作岗位数量等。

当某些事件发生时,例如服务器负载过高等,有什么方法可以调用函数

您可以在工作中使用 JMX 来访问和监视信息并在某些特定条件下触发操作。但这更多的是一种拉模式,而不是基于事件的模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top