Maison > Java > javaDidacticiel > Pourquoi mon application Spring Boot ne parvient-elle pas à trouver les ressources Classpath lorsqu'elle est exécutée en tant que JAR ?

Pourquoi mon application Spring Boot ne parvient-elle pas à trouver les ressources Classpath lorsqu'elle est exécutée en tant que JAR ?

Patricia Arquette
Libérer: 2024-11-03 11:25:02
original
279 Les gens l'ont consulté

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

Ressource Classpath introuvable lors de l'exécution en tant que JAR

Ce problème peut être rencontré lors du chargement d'une ressource Classpath à l'aide de l'annotation @Value au printemps Démarrez les applications. Bien qu'il fonctionne correctement lorsqu'il est exécuté à partir d'IDE comme STS, l'exécution du fichier jar généré via le package mvn entraîne une exception FileNotFoundException.

Résoudre le problème

La raison sous-jacente est cette ressource .getFile() s'attend à ce que la ressource soit directement disponible sur le système de fichiers. Cependant, lors de l'exécution en tant que JAR, les ressources sont regroupées dans l'archive, ce qui rend cette approche inefficace.

Solution

Pour résoudre ce problème, remplacez getFile() par getInputStream (). Cette méthode vous permet d'accéder au contenu de la ressource quel que soit son emplacement. Voici le code modifié :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal