Oli*_*ver 3 java spring spring-mvc
有没有办法在Spring bean定义文件中使用相对路径,比如相对于类路径或/ META-INF ?这与使用ServletContext获取此类信息略有不同.
例如:我正在尝试为嵌入式数据库H2定义文件名.
<bean id="myDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:~/mydb;AUTO_SERVER=TRUE"
p:username=""
p:password="" />
Run Code Online (Sandbox Code Playgroud)
~/mydb不是那么渴望,因为它取决于你部署应用程序的方式和位置,主目录可能不在那里......我怎样才能让它写入,例如,/WEB-INF/dbstore/?
顺便说一句 - 我按照建议尝试了"classpath:",它在这种情况下似乎不起作用.
以下资源前缀始终有效:
表4.1.资源字符串
Prefix Example Explanation
---------------------------------------------------------------------------
classpath: | classpath:com/myapp/config.xml | Loaded from the classpath.
file: | file:/data/config.xml | Loaded as a URL, from the
| | filesystem. [1]
http: | http://myserver/logo.png | Loaded as a URL.
(none) | /data/config.xml | Depends on the underlying
| | ApplicationContext.
Run Code Online (Sandbox Code Playgroud)
来源: Spring Reference> TheResourceLoader
但我真的没有看到相对路径如何适应那里.也许你应该详细说明你的要求.
感谢您提供更多信息.你是对的,它不能在这种情况下工作
<bean id="myDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:~/mydb;AUTO_SERVER=TRUE"
p:username=""
p:password="" />
Run Code Online (Sandbox Code Playgroud)
Spring从不分析JDBC URL,它只是将它传递给bean.我建议使用这个PropertyPlaceHolderConfigurer机制:
<bean id="myDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:${dbpath};AUTO_SERVER=TRUE"
p:username=""
p:password="" />
<!-- example config -->
<context:property-placeholder location="classpath:com/foo/jdbc.properties"
systemPropertiesMode="override" />
Run Code Online (Sandbox Code Playgroud)
现在,您可以在类路径或每个系统属性的属性文件中配置路径.实际上,您可能希望执行以下操作(使整个URL可配置,而不仅仅是数据库模式名称):
p:url="${dbpath}"
Run Code Online (Sandbox Code Playgroud)