Подтвердить что ты не робот

Как выполнять задания сразу после spring загружает контекст приложения?

Я хочу запустить некоторые задания сразу после загрузки контекста Spring, но я не знаю, как это сделать.
Вы не знаете, как это сделать?

4b9b3361

Ответ 1

Благодарю всех вас за ваш ответ. На самом деле я пропустил небольшую деталь в своем вопросе, я хотел запустить Quartz Job сразу после загрузки контекста приложения. Я попробовал решение stakfeman, но у меня были некоторые проблемы с работой Quartz Jobs. Наконец, я нашел это решение: используйте Quartz внутри Spring, вот код:

<!--
        ===========================Quartz configuration====================
    -->
    <bean id="jobDetail"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="processLauncher" />
        <property name="targetMethod" value="execute" />
    </bean>

    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <!-- see the example of method invoking job above -->
        <property name="jobDetail" ref="jobDetail" />
        <!-- 10 seconds -->
        <property name="startDelay" value="10000" />
        <!-- repeat every 50 seconds -->
        <property name="repeatInterval" value="50000" />
    </bean>

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger" />
            </list>
        </property>
    </bean>

еще раз спасибо за помощь, и я приношу свои извинения, если вопрос не очень ясен ": (

Ответ 2

Другая возможность - зарегистрировать прослушиватель для событий контекста приложения(). В основном это то же самое, что решение скаффмана, просто выполните:

org.springframework.context.ApplicationListener<org.springframework.context.event.ContextRefreshedEvent>

вместо Lifecycle. У него есть только один метод вместо трех.: -)

Ответ 3

Если вы хотите запустить задание после запуска Spring, то вы можете использовать ApplicationListener и событие ContextRefreshedEvent.

public class YourJobClass implements ApplicationListener<ContextRefreshedEvent>{

    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent ) {
             // do what you want - you can use all spring beans (this is the difference between init-method and @PostConstructor where you can't)
             // this class can be annotated as spring service, and you can use @Autowired in it

    }
}

Ответ 4

Вы можете написать класс bean, который реализует интерфейс org.springframework.context.Lifecycle. Добавьте этот bean в свой контекст, и метод start() будет вызван контейнером, как только этот контекст завершит запуск.

Ответ 5

Используйте аннотацию @PostConstruct. Чем вы можете комбинировать любые свойства задания и гарантировать запуск вашего метода в контексте нагрузки.