Quartz2.2.1 개발 문제
4.QuartzJobBean 클래스나 그 안의 속성이 수정되면 데이터베이스에 대응하는 qrtzjob_details 저장된jobclass_이전의QuartzJobBean입니다. 이 오래된 Job을 다시 실행할 때 해당하는QuartzJobBean을 찾을 수 없고, 빈 포인터가 이상합니다.
두 번째 문제와 세 번째는 서로 관련되어 있다. 이 두 문제를 해결하고자 하는 방안 중 하나는 Job에SessionFactory를 포함하지 않으면 모든 것이 OK되지 않는다는 것이다. 왜냐하면 SessionFactory는hibernate dao의 속성이고 hibernate dao는Simple Service의 속성이기 때문에 Simple Service에는hibernate dao 속성이 있을 수 없다.이렇게 Simple Service 업무 방법에 필요한hibernate dao는 어떻게 얻습니까?스프링에 대한 이해는 Application Context를 통해 모든spring bean을 얻을 수 있다는 것을 알지만, 여기서 Application Context는 어떻게 얻습니까?...org 보기.springframework.web.context.ContextLoaderListener org를 찾습니다.springframework.web.context.ContextLoader.GetCurrent Web Application Context () 는 Application Context를 얻을 수 있으며, Spring Bean 서비스 클래스를 추가하여 서열화된 인터페이스를 실현할 수 있으며, Spring Bean 서비스를 통해 웹에서 불러온spring bean을 얻을 수 있습니다.
package com.sundoctor.example.service;
import java.io.Serializable;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.web.context.ContextLoader;
@SuppressWarnings("unchecked")
@Service("springBeanService")
public class SpringBeanService implements Serializable{
private static final long serialVersionUID = -2228376078979553838L;
public <T> T getBean(Class<T> clazz,String beanName){
ApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
return (T)context.getBean(beanName);
}
}
Hibernate Dao는 Job에 오래 지속되지 않기 때문에 서열화된 인터페이스를 실현할 필요가 없고 Hibernate Dao Support를 계승할 수 있다. 물론 계승하지 않을 수도 있고 자신의 취향에 따라 작성할 수도 있고 제한이 없다.
package com.sundoctor.example.dao;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.sundoctor.example.model.Customer;
import com.sundoctor.example.service.CustomerService;
@Repository("customerDao")
public class CustomerHibernateDao extends HibernateDaoSupport {
private static final Logger logger = LoggerFactory.getLogger(CustomerService.class);
public Customer getCustomer2() {
return (Customer) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Customer customer = (Customer) session.createQuery("from Customer where id = 1").uniqueResult();
logger.info("Customer2={}", customer);
return customer;
}
});
}
public Customer getCustomer1() {
Customer customer = (Customer) this.getHibernateTemplate().get(Customer.class, 1);
logger.info("Customer1={}", customer);
return customer;
}
}
hibernate dao가 더 이상 서열화 인터페이스를 실현하지 않고 Hibernate Dao Support에서 계승하기 때문에 더 이상 업무 클래스에 주입할 수 없습니다.업무 클래스에 위의 SpringBean 서비스를 주입하고 업무 방법에 필요한hibernate dao는 위의 SpringBean 서비스를 통과합니다.getBean 가져오기
package com.sundoctor.example.service;
import java.io.Serializable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.sundoctor.example.dao.CustomerHibernateDao;
import com.sundoctor.example.model.Customer;
@Service("customerService")
public class CustomerService implements Serializable {
private static final long serialVersionUID = -6857596724821490041L;
private static final Logger logger = LoggerFactory.getLogger(CustomerService.class);
private SpringBeanService springBeanService;
@Autowired
public void setSpringBeanService(@Qualifier("springBeanService") SpringBeanService springBeanService) {
this.springBeanService = springBeanService;
}
public void testMethod1() {
//
CustomerHibernateDao customerDao =springBeanService.getBean(CustomerHibernateDao.class,"customerDao");
Customer customer = customerDao.getCustomer1();
logger.info("AAAA:{}", customer);
}
public void testMethod2() {
//
CustomerHibernateDao customerDao =springBeanService.getBean(CustomerHibernateDao.class,"customerDao");
Customer customer = customerDao.getCustomer2();
logger.info("BBBB:{}", customer);
}
customer Service는 우리 Job이 구체적으로 실행하는 클래스입니다. 테이블qrtz 로 서열화되기 때문에 서열화되어야 합니다.job_details의jobclass_이 필드에서springBean 서비스 속성도 서열화되어야 합니다. 여기서springbeanse 서비스를 쓰지 않고testMethod에서 응용 프로그램 Context를 직접 사용할 수 있습니다.getBean은 dao를 가져와서 업무 조작을 진행합니다.
만약 임무가 실행되는 시간에 서버down이 떨어지거나 다른 원인으로 인해 임무가 순조롭게 완성되지 않았다면 어떻게 자동으로 또는 수동으로 깨우쳐서 그가 순조롭게 수행하도록 해야 합니까?
// Scheduler
Scheduler scheduler = ...;//(Scheduler)springContext.getBean("quartzScheduler");
// trigger name trigger group SimpleTrigger
SimpleTrigger trigger = (SimpleTrigger)scheduler.getTrigger("52f071d3-eebb-4308-abeb-9ce8ec58aba4", "DEFAULT");
// Trigger
int timesTriggered = trigger.getTimesTriggered();
trigger.setTimesTriggered(timesTriggered > 0 ? timesTriggered -1 : 0);
// ,
//trigger.setStartTime(startTime);
// ,
//trigger.setNextFireTime(nextFireTime);
// ,
// rescheduleJob tirgger
scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(), trigger);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.