Spring应用环境中的相对路径文件资源



我有一个关于让spring从项目外部的应用程序上下文中读取文件的快速问题。我有两个项目;1)项目A 2)项目数据库。项目A的结构如下:

ProjectA
|-src
   |-main
      |-webapp
      |-WEB-INF
         |-config
         |-spring

Project Database的结构如下:

Project Database
  |-db
     |-scripts
        |-deltas

在Project A的spring目录中,我有一个dao-context文件。在这我已经配置了一个嵌入式数据库,但我想从项目数据库的脚本初始化数据库。

我知道嵌入式数据库配置应该像下面这样:

<jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="someSchema.sql"/>
</jdbc:embedded-database>

然而,我正试图确定在项目数据库中引用脚本的最佳方式。换句话说,如果我想在位置中使用脚本,应该是location的值。一些细节:

  • 两个项目将在同一层次结构中一起签出。
  • 此外,该数据库将仅用于运行测试,而不是实际的生产代码。因此,无论解决方案是什么,当我运行测试任务时,它应该与我的构建脚本兼容。
  • 最后,我想避免使用绝对文件路径,因为这将在多台机器上运行。

任何想法?

欢呼

编辑:这两个项目只是文件夹而不是jar。两个项目都不在彼此的类路径中。除了它们在同一目录之外,没有任何关系。

编辑2:另一种情况(很可能发生)是db脚本可以在与ProjectA相同的项目中,但不在类路径中。例如,目录结构可能如下所示:

ProjectA
|-db
   |-scripts
      |-deltas
|-src
   |-main
      |-webapp
      |-WEB-INF
         |-config
         |-spring

如果是这种情况,我如何从'spring'目录访问'delta '目录中的脚本?

我想我已经(或多或少)理解了你的问题,但是有很多注意事项。

首先,在开发应用程序时,有3类路径:
  • 包含java源代码的源路径(将被编译),以及其他配置或数据文件(将被复制)
  • 从先前的目标路径生成的,这些路径是在jar或wars(或…)中组装的
  • 数据路径可能包含数据文件,或者jar或war之外的文件数据库。

web应用程序通常独立于其源路径执行,最终在另一台机器上:您构建war并部署在servlet或JEE容器上。

你能做的是使用环境变量、系统属性或属性值来设置web应用程序中数据路径的根目录。当在应用程序上下文中使用PropertySourcesPlaceholderConfigurer设置${...}值时,Spring允许环境变量覆盖属性值。然后使用该值访问项目外的数据。

在您的示例中,您为db位置定义了这样一个属性,并访问与该位置相关的所有数据库配置。

相关内容

  • 没有找到相关文章

最新更新