在启动时从数据库初始化Spring Web应用程序


问题内容

Spring 3.1 + Tomcat

我在这里有一个设计问题:

在数据库中已经指定了一组类别。从可以在整个Web应用程序中使用的意义上讲,这些类别可以视为全局类别。我想做的是在服务器启动时阅读这些类别,并使用Java填充某种类型的集合。唯一需要在启动时从数据库中读取一次,请考虑将其视为初始化类型。

我可以想到两个选择:

1)我应该使用一个非延迟初始化的bean吗?

要么

2)修改web.xml?

我不太确定首选的方法是什么,有关如何执行推荐操作的任何说明将不胜感激。谢谢!


问题答案:

您提供的选项是最常用的:

  1. 使用带有注释方法的单例非惰性bean @PostConstruct(但请注意,这@Transactional 可能不起作用)。这样的初始化例程可以具有多个bean。

  2. 扩展org.springframework.web.context.ContextLoaderListener并在中使用它web.xml。我发现此解决方案不太优雅,并且还会导致不良的编程风格(扩展super以增强基类的调用)