在spring Web应用程序中的启动时执行操作

时间:2014-09-15 18:01:03

标签: spring spring-mvc grails

我曾参与过grails而且很少参加spring mvc。

通常在我们的Web应用程序中,我们需要在应用程序启动或启动时执行一些操作,例如创建管理员用户和角色(如果尚未创建)或加载一些初始数据。

Grails通过具有init()和destroy()方法的BootStrap.grrovy文件提供了此功能。

如何在Spring Web应用程序中实现此功能?

请帮忙

3 个答案:

答案 0 :(得分:2)

如果使用@PostConstruct注释其中一个spring bean的方法,则会在创建应用程序上下文后调用此方法,例如

class MySpringBean {

    @PostConstruct
    private void init() {
        // initialization code goes here
    }
}

答案 1 :(得分:2)

@PostConstruct执行任务,但对我来说这不是一个完美的解决方案。

解决问题的另一种方法是处理ContextRefreshedEvent

初始化或刷新ApplicationContext时引发的事件。

以下是代码:

package a.b.c;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

@Component
public class BootStrap implements ApplicationListener<ContextRefreshedEvent>
{
  @Override
  public void onApplicationEvent(ContextRefreshedEvent event)
  {
    System.out.println("event object when context refreshed:"+event);
    ApplicationContext applicationContext = event.getApplicationContext();
    if( applicationContext.getParent()==null)
    {
      System.out.println("event object for rootApplicationContext object : "+event);
      bootApplicationData();
    }
  }

  private void bootApplicationData()
  {
    //operations you want to perform at loading time
  }
}

输出:

event object when context refreshed:org.springframework.context.event.ContextRefreshedEvent[source=Root WebApplicationContext: startup date [Wed Sep 17 23:42:04 IST 2014]; root of context hierarchy]
event object for rootApplicationContext object : org.springframework.context.event.ContextRefreshedEvent[source=Root WebApplicationContext: startup date [Wed Sep 17 23:42:04 IST 2014]; root of context hierarchy]

INFO: Initializing Spring FrameworkServlet 'dispatcherServlet'
event object when context refreshed:org.springframework.context.event.ContextRefreshedEvent[source=WebApplicationContext for namespace 'dispatcherServlet-servlet': startup date [Wed Sep 17 23:42:13 IST 2014]; parent: Root WebApplicationContext]

答案 2 :(得分:0)

ContextLoaderListener,实现此接口,并在加载上下文后调用它。

http://docs.spring.io/autorepo/docs/spring-framework/3.0.x/api/org/springframework/web/context/ContextLoaderListener.html