Klassenpfad-Ressource bei Ausführung als JAR nicht gefunden
Dieses Problem kann beim Laden einer Klassenpfad-Ressource mithilfe der @Value-Annotation in Spring auftreten Boot-Anwendungen. Während es ordnungsgemäß funktioniert, wenn es von IDEs wie STS ausgeführt wird, führt die Ausführung der über das MVN-Paket generierten JAR-Datei zu einer FileNotFoundException.
Behebung des Problems
Der zugrunde liegende Grund ist diese Ressource .getFile() erwartet, dass die Ressource direkt im Dateisystem verfügbar ist. Bei der Ausführung als JAR werden die Ressourcen jedoch im Archiv gepackt, wodurch dieser Ansatz unwirksam wird.
Lösung
Um dieses Problem zu beheben, ersetzen Sie getFile() durch getInputStream (). Mit dieser Methode können Sie unabhängig von ihrem Standort auf den Inhalt der Ressource zugreifen. Hier ist der geänderte Code:
<code class="java">@Configuration @ComponentScan @EnableAutoConfiguration public class Application implements CommandLineRunner { private static final Logger logger = Logger.getLogger(Application.class); @Value("${message.file}") private Resource messageResource; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... arg0) throws Exception { // both of these work when running as Spring boot app from STS, but // fail after mvn package, and then running as java -jar testResource(new ClassPathResource("message.txt")); testResource(this.messageResource); } private void testResource(Resource resource) { try { InputStream inputStream = resource.getInputStream(); logger.debug("Found the resource " + resource.getFilename()); } catch (IOException ex) { logger.error(ex.toString()); } } }</code>
Das obige ist der detaillierte Inhalt vonWarum findet meine Spring Boot-Anwendung keine Klassenpfadressourcen, wenn sie als JAR ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!