需求:springboot 启动后自动执行某些代码,初始化数据,并将数据放到 servletContext
中。
首先,不可使用 ServletContextListener
,即不能用 @WebListener
,因为 servlet 容器初始化后,spring 并未初始化完毕,不能使用 @Autowired
注入 spring 的对象。
方法一:
推荐使用 ApplicationListener
:启动项目, spring 加载完毕后,才执行该 ApplicationListener
,并且该 Listener 中可以使用 spring 的内容。
@Component
public class InitBlog implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
//获取applicationContext
ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
//获取application
ServletContext application = ((WebApplicationContext) contextRefreshedEvent.getApplicationContext()).getServletContext();
assert application != null;
……
}
}
方法二:未实践过
直接注入ServletContext
,然后初始化启动的方法上加@PostConstruct
@Autowired
private ServletContext servletContext;
评论区