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>
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!