0

我一直在寻找其他人做同样的事情,但还没有看到像这样的场景,所以我想看看这里是否有人对如何实现这一点有任何好的想法。

我的团队构建并维护了一个名为 XNAT 的开源神经影像数据存档工具。我们应用程序的早期版本总是要求用户运行一个构建器应用程序,该应用程序接受一个 build.properties 文件并使用它来初始化数据库服务器配置等。我们真的在尝试制作一个可以在 NeuroDebian 存储库上使用的可安装的 war 文件。为了做到这一点,我们需要能够在没有任何数据库配置信息的情况下启动应用程序通过配置向导(如 Wordpress 或 Drupal 安装)运行,其中包括用户输入数据库配置,最后在某处设置此配置信息并重新启动或重新初始化应用程序上下文,以便启动其数据源,运行 Hibernate 实体扫描,解析所有需要数据源或 Hibernate 事务管理器的自动连接或注入的依赖项,并为 @Transactional 扫描服务注释等等。

我可以很容易地看到我们如何使用新的 Spring Framework WebApplicationInitializer 来检测用户是否已经设置了数据库配置并基于此正确初始化应用程序:

  • 如果尚未配置数据库,请创建一个仅支持初始化向导 UI 的 servlet
  • 如果已配置数据库,则创建常规应用程序上下文

第一种情况的问题是用户完成初始化向导后会发生什么?我们可以将数据库配置存储在某个地方,现在我们可以开始了,但是......我们如何让常规应用程序上下文工作?我们可以只使用我们在已经初始化的场景中调用的代码并调用它吗?然后会正确初始化应用程序,并处理组件扫描等,还是......?

我们目前唯一的解决方案是让用户手动重新启动服务器(通常是 Tomcat)或使用服务器管理器应用程序来重新启动我们的应用程序。不过,这在美学上并不是很令人愉悦。

我的最终目标是编写一个简单的测试应用程序,该应用程序接收数据库凭据,然后尝试初始化其他所有内容,但我希望看看是否有人考虑过这个特定问题和/或尝试过它并有任何建议关于如何处理。任何帮助将不胜感激!

4

0 回答 0