2014-11-11 2 views
1

Я создал bean-компонент, который будет выполняться с помощью простого триггерного кварцевого планировщика. Когда я включаю AspectJ в моей весенней context.xml, мой планировщик работа не получает срабатываетВключение AspectJ для задания планировщика кварца

Вот отрывок из моей весенней context.xml

<!-- Scheduler Factory --> 
 
\t <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
 
\t \t <property name="triggers"> 
 
\t \t \t <list> \t \t \t \t 
 
\t \t \t \t <ref bean="simpleTrigger" /> 
 
\t \t \t </list> 
 
\t \t </property> 
 
\t </bean> 
 

 
\t <!-- Trigger --> 
 
\t <bean id="simpleTrigger" 
 
\t \t class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> 
 
\t \t <property name="jobDetail" ref="myJobDetail" /> 
 
\t \t <!-- 30 seconds --> 
 
\t \t <property name="startDelay" value="10000" /> 
 
\t \t <!-- repeat every 50 seconds --> 
 
\t \t <property name="repeatInterval" value="10000" /> 
 
\t </bean> 
 

 
\t <!-- Job Details --> 
 
\t <bean name="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> 
 
\t \t <property name="jobClass" value="test.MyJob" /> 
 
\t \t <property name="jobDataAsMap"> 
 
\t \t \t <map> 
 
\t \t \t \t ..... 
 
\t \t \t </map> 
 
\t \t </property> 
 
\t </bean> 
 

 
<aop:aspectj-autoproxy /> 
 
....

Я не эксперт весной или aop. Может кто-нибудь объяснить, что не так, и как мы можем достичь этого? Без включения AspectJ мой планировщик запускается правильно.

Спасибо.

ответ

1

Есть ли у вас какие-либо аспекты, применяемые к компоненту MyJob? Если это так, возможно, механизм aop создает динамический прокси jdk, который не может быть распознан кварцем api, где вы указываете конкретный класс задания типа MyJob. Если это предположение верно, то попробуйте:

<aop:aspectj-autoproxy proxy-target-class="true" /> 

Это будет вместо этого использовать CGLIB на основе класса прокси, основанный на классе MyJob.

Я рекомендую прочитать http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/aop.html#aop-proxying, чтобы понять любые последствия, которые могут иметь каждый механизм проксирования.

Если это была проблема, она может быть лучше, чтобы полностью избежать имея аспект вокруг самой работы класса, и, возможно, положить его вокруг боба, что класс задания будет вызывать для выполнения требуемой функциональности

+0

У меня есть аспекта в одном из компонентов, который будет вызываться из MyJob, и у меня был этот класс bean как окончательный класс, поэтому CGLIB не смог создать прокси. Теперь я изменил свой компонент, чтобы удалить «final», и теперь он работает. Благодарю. – rsudha

Смежные вопросы