在Tomcat 6.0.18中启动我的webapp时,我只使用初始化系统所需的内容启动Spring --即目前的数据库迁移。在迁移成功完成之前,我不希望系统的任何部分加载。这样,其他bean就不必等待迁移才能完成操作,甚至是实例化。
我有一个start-appcontext.xml,配置有一个dbMigrationDAO,一个startupManager,一个ThreadPoolExecutor,最后,一个FullSystemLauch bean。我通过setter注入将配置位置列表传递给FullSystemLaunch bean。FullSystemLaunch bean实现了ServletContextAware,获得了对当前WebApplicationContext的引用,因此我可以拥有一个ConfigurableListableBeanFactory。不幸的是,这个bean工厂的isConfigurationFrozen()返回true,因此通过调用isConfigurationFrozen没有任何效果。
我能做到这一点吗?还是Spring阻止了我这么做,因为它有点不寻常?如果理解的话,这似乎是合理的,但也有点危险。是的,我愿意把当前的上下文b/c吹走--一旦初始化完成,就不需要当前加载的单例。
谢谢你的帮助。
发布于 2009-06-21 15:22:41
您可以使用现有上下文作为其他上下文的父上下文,但我怀疑您是否可以替换现有的WebApplicationContext。
如果使用EAR - WAR打包,则可以从EAR加载应用程序上下文,然后在WAR中添加应用程序上下文。
不确定这是否适用于你的情况。
发布于 2009-06-23 06:59:26
我的观点是允许Spring初始化您的bean是否合适--按照它们声明的依赖项的顺序排列。
如果您需要数据库迁移,那么有几种模式可以让它们首先运行:
好处很明显:简单。
发布于 2009-06-22 10:19:31
延迟初始化是否可以替代您正在努力实现的目标?
https://stackoverflow.com/questions/1021899
复制相似问题