Tenho um arquivo merge.json no diretório de recursos do meu aplicativo springboot, que está sendo executado no docker.
'jar -tf app.jar' mostra BOOT-INF/classes/merge.json nos resultados.
No código, tento ler assim:
@Autowired
private ResourceLoader resourceLoader;
....
....
Resource resource = this.resourceLoader.getResource("classpath:merge.json");
File file = resource.getFile();
Files.readString(file.toPath());
Mas dá erro:
java.io.FileNotFoundException: o recurso de caminho de classe [merge.json] não pode ser resolvido para o caminho de arquivo absoluto porque ele não reside no sistema de arquivos: jar:nested:/../../app.jar/!BOOT-INF/classes/!/merge.json
O que estou perdendo aqui?
Quando seu aplicativo Spring Boot é executado a partir de um arquivo JAR, recursos como
merge.json
são empacotados dentro do JAR, não como arquivos separados no sistema de arquivos. É por isso que a chamadaresource.getFile()
não funciona, porque está tentando encontrar um arquivo no sistema, que não existe neste caso.Para ler um arquivo de dentro do JAR, você deve usar um InputStream: