通常在基于 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/