2016-04-02 11 views
29

Sto lavorando su un'applicazione Spring Boot. Ho bisogno di analizzare un file XML (countries.xml) all'avvio. Il problema è che non capisco dove metterlo in modo che io possa accedervi. La mia struttura cartelle èErrore di avvio di avvio risorse statiche mancante scr/main/resources

ProjectDirectory/src/main/java 
ProjectDirectory/src/main/resources/countries.xml 

La mia prima idea era quella di metterlo in src/main/risorse, ma quando provo a generare file (countries.xml) ottengo un NPE e la stacktrace dimostra che il mio file è cercato in ProjectDirectory (quindi src/main/resources/non viene aggiunto). Ho provato a creare File (resources/countries.xml) e il percorso sarebbe simile a ProjectDirectory/resources/countries.xml (quindi ancora src/main non viene aggiunto).

Ho provato ad aggiungere questo senza alcun risultato

@Override 
public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    super.addResourceHandlers(registry); 
} 

So che posso aggiungere src/main/manualmente, ma voglio capire perché è non funziona come deve. Ho anche provato degli esempi con ResourceLoader - con lo stesso nessun risultato.

Qualcuno potrebbe suggerire qual è il problema?

UPDATE: Solo per riferimenti futuri - dopo aver costruito il progetto, ho incontrato problemi con l'accesso al file, così ho cambiato File per InputStream

InputStream is = new ClassPathResource("countries.xml").getInputStream(); 
+0

Si sta aggiungendo questo file nel proprio file web.xml o in qualsiasi file di configurazione per comunicare all'app. Esiste – LearningPhase

+0

Solo l'aggiunta del file alla cartella non aiuterà l'app a cercare il file – LearningPhase

+0

Non ho web.xml , Ho una configurazione basata su Java. Potresti per favore consigliarmi cosa dovrei prendere in considerazione? Forse hai qualche campione? Sarei molto grato !!! – lenach87

risposta

47

Basta usare Spring Tipo ClassPathResource.

File file = new ClassPathResource("countries.xml").getFile(); 

Finché questo file si trova in Classpath, Spring lo troverà. Questo può essere src/main/resources durante lo sviluppo e il test. In produzione, può essere la directory corrente in esecuzione.

+0

Grazie mille MOLTO !! Questo mi ha davvero salvato! Funziona come previsto ora – lenach87

+0

come può convertire questo file in JSonObejct? (inizialmente i dati sono JSONobject) – Kenji

+0

Solo per aggiungere alla risposta di @luboskrnac, provare anche a usare 'File file = new ClassPathResource (". \ countries.xml "). getFile();' –

6

per ottenere i file nel classpath:

Resource resource = new ClassPathResource("countries.xml"); 
File file = resource.getFile(); 

di leggere il file OnStartup utilizzare @PostConstruct:

@Configuration 
public class ReadFileOnStartUp { 

    @PostConstruct 
    public void afterPropertiesSet() throws Exception { 

     //Gets the XML file under src/main/resources folder 
     Resource resource = new ClassPathResource("countries.xml"); 
     File file = resource.getFile(); 
     //Logic to read File. 
    } 
} 

Ecco un Small example per la lettura di un file XML all'avvio primavera Boot App.

+0

Grazie per la risposta! La prima parte, quindi come da te suggerito e luboskrnac mi ha salvato! – lenach87

+0

@ElenaChubukina Dai un'occhiata all'esempio di esempio.Hai detto che devi analizzare xml all'avvio .... –

+0

Grazie! La parte con il file di analisi non era un problema (solo la parte con il file di ricerca su classpath) - Io uso CommandLineRunner, funziona bene per me – lenach87

Problemi correlati