powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring+Quartz: не работает @Autowired
9 сообщений из 9, страница 1 из 1
Spring+Quartz: не работает @Autowired
    #39064705
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Класс планировщика:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Component
public class TestScheduler extends QuartzJobBean {

@Autowired
public TestRepository repository;
...

// 45 строчка repository.findAll();
}



В файле applicationContext.xml:
Код: xml
1.
<context:component-scan base-package="com.otv.scheduling" />



Выводится ошибка"
Код: xml
1.
2.
3.
4.
5.
6.
21:58:00,197 ERROR JobRunShell:211 - Job DEFAULT.TestScheduler threw an unhandled Exception: 
java.lang.NullPointerException
	at com.otv.scheduling.TestScheduler.executeInternal(TestScheduler.java:45)
	at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75)
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)



Подскажите почему не работает аннотация @Autowired?
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39064794
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z3r9Класс планировщика:

В файле applicationContext.xml:
Код: xml
1.
<context:component-scan base-package="com.otv.scheduling" />



Подскажите почему не работает аннотация @Autowired?

А покажите как аннотирован TestRepository...

В порядке бреда сделайте так:
Код: xml
1.
<context:component-scan base-package="com.otv" />
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39065080
Aler-om
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements
        ApplicationContextAware {

    private transient AutowireCapableBeanFactory beanFactory;

    @Override
    public void setApplicationContext(final ApplicationContext context) {
        beanFactory = context.getAutowireCapableBeanFactory();
    }

    @Override
    protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
        return beanFactory.createBean(bundle.getJobDetail().getJobClass(), AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
    }
}



и указать эту фабрику при инициализации SchedulerFactoryBean
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39065610
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА покажите как аннотирован TestRepository...
Класс TestRepository:
Код: java
1.
2.
@Repository
class TestRepository{...}



Код: java
1.
2.
3.
<bean id="TestDAO" class="com.otv.model.repository.hibernate.TestHibernateRepository">
              <property name="sessionFactory" ref="SessionFactory" />
 </bean>



Если сделать чтобы сканировало в директории com.otv то ругалось на TestDAO. Я взял везде заменил на @Autowired но ошибка в TestScheduler по прежнему осталась.
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39065741
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z3r9,

Э-э-э...
Если вы создаете бин в xml, то его не нужно аннотировать.
Если вы его аннотируете, то не нужно его описывать в xml.

Это так из личного опыта.

А так. можете вернуть поиск "бинов" как было.
Но тогда у TestRepository уберите аннотацию и создайте бин в xml.

Понятно почему Spring ругается на TestDAO.
Наверно на TestHibernateRepository стоит аннотация, а вы его еще в xml создаете.
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39066077
Aler-om
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фабрика quartz ничего про спринг не знает и инстанциирует job через new. Естественно при этом поля с @Autowired будут null.
используйте фабрику, что описана выше
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39067470
z3r9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aler-om, А я SpringBeanJobFactory не использую, у меня SchedulerFactoryBean.

mad_nazgul, я пробовал убирать в xml файле объявление. Оно все равно не работало. У меня точно так же и в тестах не работает @Autowired.
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39067615
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z3r9Aler-om, А я SpringBeanJobFactory не использую, у меня SchedulerFactoryBean.

mad_nazgul, я пробовал убирать в xml файле объявление. Оно все равно не работало. У меня точно так же и в тестах не работает @Autowired.

"По умолчагию" в тестах @Autowired и не должен работать.
Т.к. там это не надо.
Т.е. в тестах (точнее UNIT-тестах) вы вместо реального о объекта должны подсовывать mock (заглушку которая имитирует работу).

По идее можно сделать, чтобы Spring работал в тестах, но я этого не делал, т.к. использовал Mockito.
Его вполне достаточно для unit-тестирования.


А так внимательно проследите в каком месте у вас создаются бины.
В этом плане Spring проще.
Все идет от "spring.xml" (конфигурационный файл).
Т.е. в начале смотрим там, а потом в пакетах которые указаны в context:component-scan.
Если ни в одном из этих мест бин не создается, то он не создается.
Если он указан в xml и проаннотирован, то создается два раза.
...
Рейтинг: 0 / 0
Spring+Quartz: не работает @Autowired
    #39068107
Aler-om
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
z3r9,

У вас есть возможность провести отладку?
поставьте breakpoint на org.springframework.scheduling.quartz.SchedulerFactoryBean#setJobFactory и увидите какая фабрика используется.
Затем, breakpoint на org.springframework.scheduling.quartz.SpringBeanJobFactory#createJobInstance и посмотрите как создается бин TestScheduler
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring+Quartz: не работает @Autowired
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]