Heim >Java >javaLernprogramm >Warum findet meine Spring Boot-Anwendung keine Klassenpfadressourcen, wenn sie als JAR ausgeführt wird?

Warum findet meine Spring Boot-Anwendung keine Klassenpfadressourcen, wenn sie als JAR ausgeführt wird?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 11:25:02233Durchsuche

Why Does My Spring Boot Application Fail to Find Classpath Resources When Run as a JAR?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn