gpt4 book ai didi

java - 当容器首次加载 Web 应用程序时初始化 QuartzScheduler

转载 作者:行者123 更新时间:2023-12-01 19:03:24 26 4
gpt4 key购买 nike

我正在尝试按照“Quartz Scheduling框架”一书“在Web应用程序中初始化Quartz”示例中提到的步骤进行操作。这是该程序的链接 https://gist.github.com/5777d9f27c700e716a5a 。但这个例子是在Struts1框架上的。

我们的框架是带有 Hibernate 3.5 ORM 的 struts2 框架。我应该如何配置 Struts2 上的确切步骤。任何帮助将不胜感激。

但是如果我在 contextInitialized() 方法中编写代码,我会收到异常“java.lang.RuntimeException:java.io.FileNotFoundException:src/hibernate.cfg.xml(没有这样的文件或目录)”

Xml config = new Xml("src/hibernate.cfg.xml", "hibernate-configuration");
Properties prop = new Properties();
prop.setProperty("org.quartz.dataSource.tasksDataStore.driver", config.child("session-
factory").children("property").get(1).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.URL", config.child("session-
factory").children("property").get(2).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.user", config.child("session-
factory").children("property").get(3).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.password", config.child("session-
factory").children("property").get(4).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.maxConnections", "20");

SchedulerFactory sf = new StdSchedulerFactory(prop);
Scheduler sched = sf.getScheduler();

最佳答案

要在容器加载时初始化调度程序,您可以这样做。

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzServletContextListener implements ServletContextListener
{
public static final String QUARTZ_FACTORY_KEY = "org.quartz.impl.StdSchedulerFactory.KEY";
private StdSchedulerFactory factory = null;

/**
* Called when the container is shutting down.
*/
public void contextDestroyed(ServletContextEvent sce)
{
try
{
factory.getDefaultScheduler().shutdown();
} catch (SchedulerException ex)
{
}

}

/**
* Called when the container is first started.
*/
public void contextInitialized(ServletContextEvent sce)
{
ServletContext ctx = sce.getServletContext();
try
{
factory = new StdSchedulerFactory();

// Start the scheduler now
factory.getScheduler().start();
ctx.setAttribute(QUARTZ_FACTORY_KEY, factory);

} catch (Exception ex)
{
}
}
}

在您的 web.xml 中添加

<listener>
<description>A Listener Class to initialize Quartz Scheduler</description>
<listener-class>full_package_path.QuartzServletContextListener</listener-class>
</listener>

这基本上在容器加载时创建调度程序。然后,您可以使用我之前的文章从 StdSchedulerFactory 检索 StdSchedulerFactory。如果有问题请告诉我。

关于java - 当容器首次加载 Web 应用程序时初始化 QuartzScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292901/

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