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

应用程序上下文中的Spring相对路径文件资源,spring,spring-jdbc,applicationcontext,embedded-database,filereference,Spring,Spring Jdbc,Applicationcontext,Embedded Database,Filereference,我有一个关于让spring从项目外部的应用程序上下文读取文件的快速问题。我有两个项目;1) 项目2)项目数据库。项目A的结构如下: ProjectA |-src |-main |-webapp |-WEB-INF |-config |-spring 项目数据库具有以下结构: Project Database |-db |-scripts |-deltas 在项目A的spring目录中,我有一个da

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

ProjectA
|-src
   |-main
      |-webapp
      |-WEB-INF
         |-config
         |-spring
项目数据库具有以下结构:

Project Database
  |-db
     |-scripts
        |-deltas
在项目A的spring目录中,我有一个dao上下文文件。在本文中,我配置了一个嵌入式数据库,但是我希望使用project数据库中的脚本初始化数据库。特别是在目录增量中

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

<jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="someSchema.sql"/>
</jdbc:embedded-database>
如果是这种情况,我将如何从“spring”目录访问“deltas”目录中的脚本?

我想我(或多或少)已经理解了您的要求,但有许多警告

首先,在开发应用程序时,有3类路径:

  • 包含java源(将被编译)和其他配置或数据文件(将被复制)的源路径
  • 由以前在JAR或WAR(或…)中组装的路径生成的目标路径
  • 可能包含数据文件或jar或war之外的文件数据库的数据路径
web应用程序通常独立于其源路径执行,最终在另一台机器上执行:您构建war并部署在servlet或JEE容器中

您可以使用环境变量、系统属性或属性值来设置web应用程序中数据路径的根。当使用
propertysourcesplaceplaceconfigurer
在应用程序上下文中设置
${…}
值时,Spring允许环境变量重写属性值。然后使用该值访问项目外部的数据


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

您没有提到这两者之间的类路径级别关系。“项目数据库”是一个.jar,只是一个文件夹,它们如何将一个与另一个相关联?那么我认为您无法创建非绝对路径的内容。有没有办法使用系统属性来抵消使用绝对路径的风险?这是非常有用的信息,谢谢!所以现在我想,也许正确的方法是将db文件夹包含在ProjectA中,与src处于同一级别。还不确定在运行测试时如何引用此文件夹。所以我也在想我应该把db添加到我的类路径中。您认为呢?您可以将数据放在
/WEB-INF
文件夹下,但在容器外的单元测试中访问数据要稍微复杂一些。您还可以将它放在类路径中,因为Spring可以通过简单地使用
classpath:/path/under/classpath
在类路径中找到
资源。但是在这两种情况下,都只使用只读文件,并且总是作为
资源
访问它们,因为容器可以直接使用未爆炸的战争。我不想将它们包含在我的类路径中,因为我的构建脚本会将它们放入打包的war文件中。我认为这只剩下系统属性路径。不过谢谢你的帮助。
ProjectA
|-db
   |-scripts
      |-deltas
|-src
   |-main
      |-webapp
      |-WEB-INF
         |-config
         |-spring