2017-04-18 5 views
0

ich eine QuartzJobBeanQuarz autowired Feld ist null

public abstract class SqsQueueListener extends QuartzJobBean { 

    @Value("test-queue") 
    private String queueName; 

    @Autowired 
    private AmazonSQS sqsClient; 

    @Override 
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException { 
     LOGGER.info("Attempt to get message for SQS queue for client: [{}].", sqsClient); 
     GetQueueUrlResult result = sqsClient.getQueueUrl(queueName); 
    } 

    protected abstract void notificationAction(String message); 

} 

ich seine nicht-abstrakte Implementierung haben, die diese Klasse, aber nichts Besonderes dort erstreckt. Es erwartet autowire sqsClient.

SqsClient verwendet erstellt FactoryBean

<bean id="sqsClient" class="pack.SqsClientFactoryBean"/> 

In logs es mir Nachricht zeigt, dass das Objekt erfolgreich erstellt wurde, so dass die Fabrik selbst funktioniert.

Die xml Konfiguration sieht wie folgt aus

<bean id="sqsProcessingJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
    <property name="jobClass" value="pack.RuleReloadingSqsService"/> 
    <property name="jobDataAsMap"> 
     <map> 
      <entry key="sqsClient" value="sqsClient"/> 
     </map> 
    </property> 
</bean> 

<bean id="sqsTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> 
    <property name="jobDetail" ref="sqsProcessingJob"/> 
    <property name="repeatInterval" value="10000"/> 
</bean> 

<bean class="pack.quartz.DisablingSchedulerFactoryBean"> 
    <property name="triggers"> 
     <list> 
      <ref bean="sqsTrigger"/> 
     </list> 
    </property> 
</bean> 

Allerdings, wenn ich meine Anwendung ausführen ich sqsClient als null bekommen. Was ist das Problem?

Antwort

0

Ich habe vergessen, die Setter für sqsClient Feld hinzuzufügen.

private AmazonSQS sqsClient; 

@Override 
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {} 

public void setSqsClient(AmazonSQS sqsClient) { 
    this.sqsClient = sqsClient; 
} 
Verwandte Themen