所以我对Spring-boot有问题。基本上,这个想法是在资源中我有一个名为migrations
的目录,该目录存储需要启动的sql
脚本。它在本地计算机上运行良好。但是,一旦我将项目上传到服务器,我就会受到以下错误的欢迎:
Caused by: java.io.FileNotFoundException: class path resource [migrations] cannot be resolved to absolute file path because it does not reside in the file system:
很多谷歌搜索帮助我发现了问题。它与文件位于.jar
中有关,当我确实将目录读为InputStream
时(如在此问题中所述),如果我指定了文件的全名,则可以获取特定文件并访问其脚本。该资源,例如
resourceLoader.getResource("classpath:migrations/file.sql")
但是,这样指定资源的全名并定义所有文件名不是一个选择,因为将来此文件夹可以扩展很多,并且我不想手动编辑代码以将文件添加到运行中。
是否有解决此问题的方法,至少可以让我从目录中读取文件名,然后逐个访问它们?
答案 0 :(得分:1)
除非它使用docker文件复制资源并进行部署,否则我认为如果部署有jar则不会有一个好的解决方案。 getInputStream()始终是从任何地方获取文件的最佳解决方案。
也许是这种解决方案,但尚未尝试
ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
Resource[] resources = resolver.getResources("classpath*:/*.sql") ;
for (Resource resource: resources){
do your things maybe print the name resource
}