2016-10-20 2 views
0

MyCron.java 파일에 선언 된 메소드를 실행하는 Quartz Cron Scheduler가 Spring 프로젝트에 있습니다. quartz.xml 파일에서 , 나는이 형식으로 콩을 구성한 :DB에서 가져온 값에 따라 Quartz Cron Scheduler를 실행하십시오.

<beans> 
<bean id="wakeUsers" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     <property name="targetObject" ref="mycron" /> 
     <property name="targetMethod" value="wakeUsers" /> 
</bean> 

<bean id="wakeUsersCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
     <property name="jobDetail" ref="wakeUsers" /> 
     <property name="timeZone" ref="timeZone" /> 
     <property name="cronExpression" value="0 0/5 * * * ?" /> 
</bean> 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="jobDetails"> 
      <list> 
       <ref bean="wakeUsers" /> 
      </list> 
     </property> 

     <property name="triggers"> 
      <list> 
       <ref bean="wakeUsersCronTrigger" /> 
      </list> 
     </property> 
</bean> 
</beans> 

이 잘 실행됩니다. 질문은 현재 생산중인 3 대의 기계를 사용하고 있으며 cron은 3 대의 모든 기계에서 즉시 실행됩니다. 기계 이름대로 cron을 실행하고 싶습니다. 특정 컴퓨터 이름이 속성의 컴퓨터 이름과 일치하면 cron은 그렇지 않은 경우 실행해야합니다.

Java 코드를 통해 DB의 내 속성을 내 컴퓨터의 이름과 일치시킨 다음 내 방법을 추가로 실행하고 싶습니다.

public boolean testRun(){ 

    try { 
     InetAddress ip = InetAddress.getLocalHost(); 
     String hostName = ip.getHostName(); 

     if(nodeName.equalsIgnoreCase(hostName)){ 
      return true; 
     } 
    } catch (UnknownHostException e) { 
     logger.error("Error: Unknown Host"); 
    } 
    return false; 
} 

public void wakeUsers() throws Exception{ 
    if (testRun()) { 
     myService.wakeUsers(); 
    } 

}

어떤 도움이

을 주시면 감사하겠습니다을 : 내가 현재 가지고

은 다음 구현했습니다.

답변

0

나는 스프링 AOP를 사용하여 cron이 호출하는 메소드를 가로채는 해결책을 얻을 수있었습니다.

Spring AOP 패키지의 MethodBeforeAdvice 인터페이스를 구현하는 BaseCron이라는 클래스를 만들었습니다. 이전에이 메서드를 무시하고 거기에 MyCrons 클래스의 모든 메서드 호출 전에 실행되는 내 논리를 썼습니다.

나는 다음과 같은 스프링 설정 파일에서 프록시 빈을 만들어 내 mycrons 어떤 방법이에 의해 차단되었다 불렀다 따라서 이전

<bean id="cronsProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> 
     <property name="target" ref="mycrons" /> 
     <property name="interceptorNames"> 
      <list> 
       <value>baseCronBean</value> 
      </list> 
     </property> 
</bean> 

의 I는 속성을 확인 내 BaseCron 클래스의 본 발명의 방법 전 cron이 실행될 머신 이름.

건배!

0

나는 이것을 만났을 때 MethodInvokingJobOnSpecifiedMachine을 만들었는데 이것은 모든 기계에서 실행되지만 기계 이름이 일치하지 않으면 아무것도하지 못하는 것입니다.

그런 다음 작업의 세부 사항은 다음과 같습니다

<property name="jobDetail"> 
     <bean class="foo.bar.MethodInvokingJobOnSpecifiedMachine"> 
      <property name="machineName" value="DatabaseServer"/> 
      <property name="targetObject" ref="mycron" /> 
      <property name="targetMethod" value="wakeUsers" /> 
     </bean> 
    </property> 

나는 더 이상 내가 두려워 구현이 없습니다.

+0

효과가있을 수 있습니다. 그러나 내가 찾고있는 다른 것들이 있습니다. –

관련 문제