[英]Spring MVC Access Service class from a Cron Method annotated with @Scheduled
我有一個有效的cron方法,但是它在我的服務類上給了我一個空的java.lang.NullPointerException:
public class CronTask {
private JpassatemposService jpassatemposService;
@Autowired(required=true)
@Qualifier(value="jpassatemposService")
public void setJpassatemposService(JpassatemposService concs){
this.jpassatemposService = concs;
}
@Autowired
private ServletContext sCtx;
// @Scheduled(cron ="46 11 * * * ?")
@Scheduled(fixedDelay=30000)
public void sendCodPendentes(){
System.out.println("Start :: "+ new Date());
try {
System.out.println("TRY "+ new Date());
List<Jpassatempos> aTerminar = this.jpassatemposService.listJpassatempos24H();
System.out.println("24 "+ new Date());
List<Jpassatempos> enviados = this.jenviocodpendentesService.listJenviocodpendentes24H("CodPendentes24");
System.out.println("Enviados "+ new Date());
List<Jpassatempos> resultado = new ArrayList<Jpassatempos>();
.....
任何幫助表示贊賞
Cron 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:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<task:annotation-driven />
<bean id="cronTask" class="com.setelog.spring.CronTask"></bean>
</beans>
我的完整配置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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.setelog.spring" />
<context:component-scan base-package="com.setelog.spring.cron" />
<context:property-placeholder location="classpath:config.properties"/>
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="org.springframework.mobile.device.DeviceWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
<mvc:interceptors>
<bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" />
</mvc:interceptors>
<mvc:interceptors>
<bean class="com.setelog.spring.businessrules.Interceptor" />
</mvc:interceptors>
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod" value="com.setelog.spring.dao.UserDetailsDaoImpl.setEmails_Blocked"/>
<property name="arguments">
<list>
<value>${emails_blocked}</value>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod" value="com.setelog.spring.handler.LimitLoginAuthenticationProvider.setEmails_Help"/>
<property name="arguments">
<list>
<value>${emails_help}</value>
</list>
</property>
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- setting maximum upload size -->
<property name="maxUploadSize" value="10000000" />
</bean>
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="pt" />
<property name="cookieName" value="myAppLocaleCookie"></property>
<property name="cookieMaxAge" value="3600"></property>
</bean>
<mvc:interceptors>
<bean
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
</mvc:interceptors>
</beans>
我得到的輸出如下:
開始:: 2015年12月1日星期二12:51:19 GMT 2015年TRY 12月01日星期二12:51:19 GMT 2015 java.lang.NullPointerException
在與@Kunal聊天中的討論之后,我們確定問題出在以下XML配置上:
<bean id="cronTask" class="com.setelog.spring.CronTask"></bean>
代碼中引用的兩個服務是在XML配置中創建的,因此需要直接在此<bean>
定義中進行設置,因此以下解決方案有效:
<bean id="cronTask" class="com.setelog.spring.CronTask">
<property name="jpassatemposService" ref="jpassatemposService"/>
<property name="jenviocodpendentesService" ref="jenviocodpendentesService"/>
</bean>
在此處發布,以供將來可能會遇到相同問題的其他人使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.