2016-09-03 10 views
0

그 관찰과 정보를 공유하고자하는 이유를 알고 싶습니다 executeInternal()customerRepository의 참조를 무효화? 내가 개발했다 봄 + 석영 + 봄 데이터 JPA 예입니다. 이 예제에서는 JobDetailFactoryBean 구현을 제공하여 동시에 여러 작업을 실행하려고했습니다. jobA.java 클래스에서 나는 문제 ....org.quartz-scheduler executeInternal (JobExecutionContext executionContext)에서 저장소 참조를 무효화하는 이유는 무엇입니까?

JobA.java 나는 executeInternal() 이유에 customerRepository 인스턴스를 사용할 수 없습니다

@Service 
public class JobA extends QuartzJobBean { 

    private CustomerRepository customerRepository = null; 

    @Autowired 
    public JobA(CustomerRepository customerRepository) { 
     this.customerRepository = customerRepository; 
    } 
    public JobA() { } 

    @Override 
    protected void executeInternal(JobExecutionContext executionContext) throws JobExecutionException { 
     System.out.println("~~~~~~~ Job A is runing ~~~~~~~~"); 
     Trigger trigger = executionContext.getTrigger(); 
     System.out.println(trigger.getPreviousFireTime()); 
     System.out.println(trigger.getNextFireTime()); 
     getCustomerList(); 
    } 

    private List<Customer> getCustomerList(){ 
     List<Customer> customers = customerRepository.findAll(); 
     for (Customer customer : customers) { 
      System.out.println("------------------------------"); 
      System.out.println("ID : "+customer.getId()); 
      System.out.println("NAME : "+customer.getName()); 
      System.out.println("STATUS : "+customer.getStatus()); 
     } 
     return customers; 
    } 
} 

을 경험? 내가 getCustomerList()에서 공개 JobA(CustomerRepository customerRepository) {면 잘 작동하지만, 내가 executeInternal()에서 사용하면 customerRepository의 참조를 무효화하는 이유는 무엇입니까?

봄 - Quartz.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:repository="http://www.springframework.org/schema/data/repository" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd"> 

    <import resource="classpath:dataSourceContext.xml"/> 

    <jpa:repositories base-package="com.mkyong.repository" /> 
    <context:component-scan base-package="com.mkyong.*" /> 
    <context:annotation-config /> 

    <bean id="jobA" class="com.mkyong.job.JobA" /> 
    <bean id="jobB" class="com.mkyong.job.JobB" /> 
    <bean id="jobC" class="com.mkyong.job.JobC" /> 

    <!-- ~~~~~~~~~ Quartz Job ~~~~~~~~~~ --> 
    <bean name="JobA" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
     <property name="jobClass" value="com.mkyong.job.JobA" /> 
    </bean> 

    <bean name="JobB" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
     <property name="jobClass" value="com.mkyong.job.JobB" /> 
    </bean> 

    <bean name="JobC" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
     <property name="jobClass" value="com.mkyong.job.JobC" /> 
    </bean> 

    <!-- ~~~~~~~~~~~ Cron Trigger, run every 5 seconds ~~~~~~~~~~~~~ --> 
    <bean id="cronTriggerJobA" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
     <property name="jobDetail" ref="JobA" /> 
     <property name="cronExpression" value="0/5 * * * * ?" /> 
    </bean> 

    <bean id="cronTriggerJobB" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
     <property name="jobDetail" ref="JobB" /> 
     <property name="cronExpression" value="0/5 * * * * ?" /> 
    </bean> 

    <bean id="cronTriggerJobC" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
     <property name="jobDetail" ref="JobC" /> 
     <property name="cronExpression" value="0/5 * * * * ?" /> 
    </bean> 

    <!-- ~~~~~~~~~~~~~~~~ Scheduler bean Factory ~~~~~~~~~~~~~~~~ --> 
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
       <ref bean="cronTriggerJobA" /> 
       <!-- <ref bean="cronTriggerJobB" /> 
       <ref bean="cronTriggerJobC" /> --> 
      </list> 
     </property> 
    </bean> 
</beans> 

dataSourceContext.xml

<?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:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd 
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd"> 

    <context:property-placeholder location="classpath:database.properties"/> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"/> 


    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${mysql.driver.class.name}" /> 
     <property name="url" value="${mysql.url}" /> 
     <property name="username" value="${mysql.username}" /> 
     <property name="password" value="${mysql.password}" /> 
    </bean> 

    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
     <property name="showSql" value="true"/> 
     <property name="generateDdl" value="true"/> 
     <property name="database" value="${database.vendor}"/> 
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 

     <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 

     <!-- spring based scanning for entity classes--> 
     <property name="packagesToScan" value="com.mkyong.*"/> 
    </bean> 
</beans> 

App.java

public class App { 
    public static void main(String[] args) throws Exception { 
     ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Quartz.xml"); 
    } 
} 

답변

0

당신은 customerRepository 빈을 정의하고 있습니까? xml 파일에 정의하거나 @Repository annonation을 클래스에 추가해야합니다.