2016-09-02 2 views
0

У меня есть веб-приложение, для которого требуется инициализация статических переменных, как только я вытащил .war в папку webapp Tomcat. Эта инициализация должна вызвать @Service для извлечения начальной настройки.Вызов Spring @Service при инициализации веб-приложения

я понял, что инъекция @Autowire работает только тогда, когда мой графический интерфейс вызова службы

Каков наилучший способ инициализации моего Spring веб-приложения после того, как метание .war в контейнере приложения? Мне нужно, чтобы эта инициализация выполнялась только один раз.

+1

@PostConstruct на методе инициализации может помочь вам –

+0

http://stackoverflow.com/questions/17557214/run-code-once-spring-app-is-succesfully-deployed – amicoderozer

+0

@JekinKalariya но PostConstruct мне нужна связать мой инициализатор с моими бобами ... мой инициализатор является чем-то независимым от любого бизнеса или компонента в моем приложении ... Мне просто нужен «основной» метод, который будет выполняться один раз и будет заполнять некоторые переменные данными (например, путь на сервер и т. д.) – Jaabax

ответ

1

Если вам нужно что-то сделать после того, как servletContext инициализирован, весной мы используем ApplicationListener для этого.

public class SpringListener implements ApplicationListener<ContextRefreshedEvent>{ 

     // this should work if other setting is right 
     @Autowired 
     XXX xxx; 

     public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { 
       // do things here 
     } 
    } 

in application.xml 
<bean id="eventListenerBean" class="package.name.SpringListener " /> 

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#context-functionality-events

На otherhand, просто FYI, традиционный способ сделать это с помощью контекста сервлета. http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html

+0

хм, это кажется хорошим подходом, потому что я не хочу, чтобы мой инициализатор привязан к любому из моих бобах ... и я не хочу создавать @ entity/repository/service только для этого ... единственное, что делает мой инициализатор, - это взять класс. @Enti связей в пути класса и сохранения в статической переменной (поскольку последующие экраны будут автоматически сгенерированы с этими .classes) – Jaabax

+0

Я рад, что это вам помогло. Иногда contextRefreshedEvent вызывается дважды из-за плохой конфигурации, вот решение. http://stackoverflow.com/questions/6164573/why-is-my-spring-contextrefreshed-event-called-twice –

+0

На всякий случай вам это нужно. :) –

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