我有一个使用Struts和Hibernate之类的框架的Web应用程序。目前,我正在使用Quartz开发此应用程序的调度程序。在编码时,我意识到使用Quartz的线程不可能使用Hibernate会话。在石英中使用Hibernate会话
任何人都有使用石英工作类的休眠会话的解决方案?
我有一个使用Struts和Hibernate之类的框架的Web应用程序。目前,我正在使用Quartz开发此应用程序的调度程序。在编码时,我意识到使用Quartz的线程不可能使用Hibernate会话。在石英中使用Hibernate会话
任何人都有使用石英工作类的休眠会话的解决方案?
一种方法是使用HibernateUtil
class它建立在一个静态初始化的SessionFactory
,使通过public static
吸气可用它。你的Quartz作业可以创建一个Session
作为HibernateUtil.getSessionFactory().getCurrentSession()
并使用它。
你可以看下面的链接,看它是否给你一个方向。既然你不使用Spring,它可能很难将此直接
在这种情况下,我可以使用spring,因为我在Struts中的代码量非常小。 – Joe 2010-12-20 03:10:54
我知道这是一个老问题,但我做了一个快速的谷歌搜索,这是第一次。
在石英工作,在方法的开始加入这一行:
public void execute(JobExecutionContext context) throws JobExecutionException
{
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); //<-- this line
//...your code here...
}
我道歉,如果这不能解决您的问题,但我怀疑它会引起某人的未来。
非常感谢您的回答。我是从前几天面临这个问题,你的答案解决我的问题.... 再次感谢百万 – Luffy 2015-11-27 05:25:23
搜索“Quartz Hibernate”返回了这个。来到不同的解决方案(并使用Tapestry),我想我会分享它。
调度时的工作:
…
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDataMap myJobDataMap = new JobDataMap();
myJobDataMap.put("HibernateSessionManager", hibernateSessionManager);
myJobDataMap.put("PerthreadManager", perThreadManager);
JobDetail job = JobBuilder.newJob(SomeJob.class).withIdentity(
"SomeJob", "someGroup").setJobData(
myJobDataMap).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(
"Some Trigger", "someGroup").startNow().withSchedule(
SimpleScheduleBuilder.repeatSecondlyForever(30)).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
…
,并在工作
public void execute(JobExecutionContext context)
throws JobExecutionException
{
JobDataMap jdm = context.getMergedJobDataMap();
HibernateSessionManager hibernateSessionManager = (HibernateSessionManager) jdm.get("HibernateSessionManager");
PerthreadManager perThreadManager = (PerthreadManager) jdm.get("PerthreadManager");
Session session = hibernateSessionManager.getSession();
//do stuff with session …
//now clean up, otherwise I ended up with <IDLE> in transactions
perThreadManager.cleanUp();
}
希望有人可以用这个。
我的石英工作类应该FTP到一些远程服务器上并向他们上传一个大集合(百万个)XML文件。这是这种情况下正确的方法吗? – Joe 2010-12-15 06:02:59
我的代码在石英工作中运行休眠时产生了很多错误。如果我从石英外部运行它,它可以正常工作并执行所有数据库操作。我需要改变以使其与石英一起工作。 – Joe 2010-12-22 04:18:37
什么样的错误? – 2011-01-21 02:57:16