应用上下文中的Spring相对路径文件资源

时间:2014-08-19 08:02:18

标签: spring spring-jdbc applicationcontext embedded-database filereference

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

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

项目数据库具有以下结构:

Project Database
  |-db
     |-scripts
        |-deltas

在Project A的spring目录中,我有一个dao-context文件。在这里我配置了一个嵌入式数据库,但是我想用项目数据库中的脚本初始化数据库。具体来自目录deltas。

我知道嵌入式数据库配置应该如下:

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

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

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

有什么想法吗?

干杯

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

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

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

如果是这种情况,我将如何访问&#39;增量&#39;中的脚本?来自&#39; spring&#39;的目录?目录

1 个答案:

答案 0 :(得分:2)

我有(或多或少)了解你的要求,但有许多警告。

首先,在开发应用时,有三类路径

  • 包含java源(将被编译)的源路径,以及其他配置或数据文件(将被复制)
  • 从以前在罐子或战争(或......)
  • 中组装的目标路径生成的目标路径
  • 可能包含数据文件的数据路径,或jar或战争之外的文件数据库。

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

您可以使用环境变量,系统属性或属性值来设置Web应用程序中数据路径的根。在使用PropertySourcesPlaceholderConfigurer在应用程序上下文中设置${...}值时,Spring非常友好地允许环境变量覆盖属性值。然后使用该值来访问项目外的数据。

在您的示例中,您为db位置定义了此类属性,并相对于该位置访问所有数据库配置。