java - 使用 Spring ApplicationContext 类路径的绝对路径加载资源文件(如(sql、txt 等))

标签 java spring

通常在基于 Maven 的 Spring 应用程序中,如果我需要使用任何文件资源,我通常会将其放置在文件夹 src/main/resources 中,然后它将神奇地可用于 Spring 应用程序配置文件,如下所示,并带有“classpath:create-table.sql”等文件引用。

spring_config.xml

<jdbc:embedded-database id="dataSource" type="DERBY">
    <jdbc:script location="classpath:create-table.sql" />
</jdbc:embedded-database>

如果使用 WebApplicationContext 从 web.xml 加载应用程序上下文,那就更神奇了,在这种情况下,它甚至不需要以下样式的应用程序上下文初始化,但是如果我要编写一个独立的基于 java 的 spring 应用程序,它需要以下应用程序上下文初始化,而不是基于 maven 或 web,那么如何在其类路径中提供任何资源文件来引用这样的文件(create-table.sql),如上面在配置文件中所示?

ApplicationContext context = new ClassPathXmlApplicationContext("/spring_config.xml");

我知道如何使用如下所示的绝对路径加载,但我需要的是能够在类路径中提供资源文件,以便 spring 配置文件从类路径本身引用。

<jdbc:embedded-database id="dataSource" type="DERBY">
    <jdbc:script location="file:C:\junit_framework\springmodulecontext\create-table.sql" />
</jdbc:embedded-database>

如果有一种方法可以使用相对路径引用文件,这样我就可以将资源文件放在配置文件旁边,并使用当前目录符号(例如“file:./create-table.sql”)引用它,那就更好了?我尝试了这种绝对表示法,但似乎不起作用。

最佳答案

如果我要编写一个独立的基于 java 的 spring 应用程序,而不是基于 Maven 或 Web,我可以通过将其目录路径(绝对或相对)包含到 java -classpath 列表中来使任何资源文件在类路径中可用。

也就是说,如果我想要像“classpath:create-table.sql”这样的文件引用实际读取./create-table.sql,我需要将.(这是所需文件的目录路径)放入类路径中,如下所示:

java -classpath .:lib/*.jar:...

关于java - 使用 Spring ApplicationContext 类路径的绝对路径加载资源文件(如(sql、txt 等)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59737326/

相关文章:

java - Fragment和Activity之间的通信

调用签名已更改的java方法时jsp中的java.lang.NoSuchMethodError

java - 使用 MigLayout 将 JLabel 添加到 JPanel 时出现类转换异常(java.lang.String 无法转换为 net.miginfocom.layout.CC)

Java Game Server线程安全接收websocket消息

java - 在 PBEKeySpec 中使用随 secret 码时是否需要迭代和盐?

java - Spring JPA : Cause path expected for join

java - JSP :forward on button Click()(when target jsp is under web-inf folder) 中的问题

java - 实时重新加载在 Spring boot devtools 中不起作用

java - BindingResult 和 bean 的普通目标对象都不能用作请求属性

xml - 如何在 IntelliJ IDEA 中加载 xml 文件