Java 웹 프로젝트에서 시간 작업 작성 실현

3266 단어 javaweb정시 임무
이전에 회사에 전문적인 임무 스케줄링 프레임워크가 있어서 사용해야 할 때jar 패키지를 도입하여 설정과 주석을 추가하면 사용할 수 있고 전문적인 플랫폼으로 운행하는 기계와 집행 상태를 감시하고 감시할 수 있다.
지금 갑자기 이 도구가 없어지고 정시 임무를 쓰려면 어떻게 해야 합니까?
비웹 응용 프로그램에 있어서 우리는 Quartz를 사용할 수 있으며 사용이 간단하고 기능이 강하다.
Java 웹 응용 프로그램에 있어 Quartz(방법 소개: https://www.jb51.net/article/104105.htm도 사용할 수 있지만 더 편리한 도구가 있습니다. 바로spring이 자체적으로 지원하는 정시 작업 기능입니다.
Spring의 정시 작업은spring-context에서 간단하게 구성된 템플릿은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:task="http://www.springframework.org/schema/task" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
  http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> 
 
 <task:scheduler id="scheduler" pool-size="200"/> 
 <task:scheduled-tasks> 
  <!--  task --> 
  <task:scheduled ref="xxxTask" method="execute" cron="0 0 * * * ?"/> 
 </task:scheduled-tasks> 
 <task:annotation-driven scheduler="scheduler"/> 
</beans> 
이 중에서task:scheduler는 정시 작업을 수행하는 scheduler를 지정합니다. 기본적으로 사용하는 것은
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
task:annotation-driven에서 @Async와 @Scheduled 주석을 사용할 수 있습니다.
task:scheduler-tasks에서 하나의task를 정의했는데 그 중에서 실행 주기는cron 표현식을 사용할 수 있고 지연 시간이나 주파수 등을 지정할 수 있습니다.
cron을 변환하는 온라인 도구가 있으니 추천합니다. (여기에 7글자가 표시될 수 있으니 주의하십시오. 마지막 *를 제거하면 됩니다.): http://tools.jb51.net/code/Quartz_Cron_create
다음은 또 하나의 문제가 있다. 통상적으로 우리의 온라인 환경은 집단 환경이고 여러 대의 기계가 있다. 이런 정시 임무는 통상적으로 한 대에서 집행하기만 하면 된다. 어떻게 통제할 수 있을까?
지금 두 가지 방법을 생각해서 여러분에게 공유합니다.
1. Redis 글로벌 캐시 사용
https://www.jb51.net/article/104111.htm
2. 서류를 판단하는 방식
파일의 존재 여부를 판단하여 작업을 실행할지 여부를 결정합니다 (작업에 대응하는spring 프로필을 불러올지). 참고 코드:

@Component 
public class XxxListener implements ApplicationContextAware { 
 
 //   
 private static final AtomicInteger INIT_LOCK = new AtomicInteger(0); 
 
 @Override 
 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
 
  if (INIT_LOCK.incrementAndGet() > 1) { 
   //   
   return; 
  } 
 
  Resource resource = applicationContext.getResource("classpath:< >"); 
  if (!resource.exists()) { 
   //  ,  
   return; 
  } 
   
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(applicationContext); 
  context.setConfigLocations("classpath:spring/job.xml"); 
  context.refresh(); 
 } 
} 
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기