首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能否动态地将额外的Spring配置文件加载到现有的WebApplicationContext中?

我能否动态地将额外的Spring配置文件加载到现有的WebApplicationContext中?
EN

Stack Overflow用户
提问于 2009-06-20 15:59:30
回答 6查看 5.9K关注 0票数 8

在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吹走--一旦初始化完成,就不需要当前加载的单例。

谢谢你的帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-21 15:22:41

您可以使用现有上下文作为其他上下文的父上下文,但我怀疑您是否可以替换现有的WebApplicationContext。

如果使用EAR - WAR打包,则可以从EAR加载应用程序上下文,然后在WAR中添加应用程序上下文。

不确定这是否适用于你的情况。

票数 2
EN

Stack Overflow用户

发布于 2009-06-23 06:59:26

我的观点是允许Spring初始化您的bean是否合适--按照它们声明的依赖项的顺序排列。

如果您需要数据库迁移,那么有几种模式可以让它们首先运行:

  • 如果使用Hibernate/JPA,则使sessionFactory/persistenceManager依赖于迁移bean;
  • 如果使用普通JDBC,则创建包装器DataSource,并在其init方法中调用迁移( 代码样本)。

好处很明显:简单。

票数 3
EN

Stack Overflow用户

发布于 2009-06-22 10:19:31

延迟初始化是否可以替代您正在努力实现的目标?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1021899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档