Je travaille sur une application Spring Boot. Je dois parsingr un fichier XML (counsortinges.xml) au démarrage. Le problème est que je ne comprends pas où le mettre pour que je puisse y accéder. La structure de mes dossiers est
ProjectDirectory/src/main/java ProjectDirectory/src/main/resources/counsortinges.xml
Ma première idée était de la placer dans src / main / resources, mais quand j’essaie de créer File (counsortinges.xml), je reçois un NPE et la stacktrace indique que mon fichier est examiné dans ProjectDirectory (donc src / main / resources / n’est pas ajouté). J’ai essayé de créer File (resources / counsortinges.xml) et le chemin ressemblerait à ProjectDirectory / resources / counsortinges.xml (donc à nouveau, src / main n’est pas ajouté).
J’ai essayé d’append ceci sans résultat
@Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addResourceHandlers(registry); }
Je sais que je peux append src / main / manuellement, mais je veux comprendre pourquoi cela ne fonctionne pas comme il le faut. J’ai également essayé des exemples avec ResourceLoader – avec le même résultat nul.
Quelqu’un pourrait-il suggérer quel est le problème?
UPDATE: Juste pour les futures références – après la construction du projet, j’ai rencontré un problème avec l’access au fichier, j’ai donc changé le fichier en InputStream
InputStream is = new ClassPathResource("counsortinges.xml").getInputStream();
Utilisez simplement le type Spring ClassPathResource .
File file = new ClassPathResource("counsortinges.xml").getFile();
Tant que ce fichier est quelque part sur le chemin de classe, Spring le trouvera. Cela peut être src/main/resources
pendant le développement et les tests. En production, il peut s’agir d’un répertoire en cours d’exécution.
Pour récupérer les fichiers dans le classpath:
Resource resource = new ClassPathResource("counsortinges.xml"); File file = resource.getFile();
Pour lire le fichier onStartup, utilisez @PostConstruct
:
@Configuration public class ReadFileOnStartUp { @PostConstruct public void afterPropertiesSet() throws Exception { //Gets the XML file under src/main/resources folder Resource resource = new ClassPathResource("counsortinges.xml"); File file = resource.getFile(); //Logic to read File. } }
Voici un petit exemple pour lire un fichier XML au démarrage de Spring Boot App.
Lors de l’utilisation de l’application Spring Boot, il est difficile d’obtenir les ressources classpath à l’aide de resource.getFile()
lorsqu’il est déployé en tant que fichier JAR lorsque j’ai rencontré le même problème. Ce scan sera résolu en utilisant Stream qui trouvera toutes les ressources placées n’importe où dans classpath.
Voici l’extrait de code pour le même –
ClassPathResource classPathResource = new ClassPathResource("fileName"); InputStream inputStream = classPathResource.getInputStream(); content = IOUtils.toSsortingng(inputStream);
Vous devez utiliser la construction suivante
InputStream in = getClass().getResourceAsStream("/yourFile");
Veuillez noter que vous devez append cette barre oblique avant votre nom de fichier.