2011-01-26 14 views
8

Ho un'applicazione Web funzionante con applicationContext.xml in WEB-INF/config/applicationContext.xml. Ora ho bisogno di implementare alcuni strumenti di test come applicazione standalone, che può utilizzare lo stesso applicationContext.xml, ma hanno problemi con il percorso di configurazione per ClassPathXmlApplicationContext.Percorso corretto per applicationContext.xml utilizzando ClassPathXmlApplicationContext

So che quando copio applicationContext.xml nel pacchetto predefinito (dove risiede .java) posso usare ClassPathXmlApplicationContext ("applicationContext.xml"), ma è necessario?

import org.apache.log4j.Logger; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class AdminTool { 

    private Logger log = Logger.getLogger(getClass()); 

    /** all below doesn't work - FileNotFoundException) **/ 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml"); 

    public static void main(String[] args) { 
     new AdminTool(); 
    } 

    public AdminTool() { 
     log.debug(ac); 
    } 

} 

risposta

12

In uno scenario di test locale, non sono all'interno di un vaso, in modo da non hanno bisogno di accesso Classpath-based. Utilizzare invece FileSystemXmlApplicationContext.

Probabilmente qualcosa di simile:

private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "src/WEB-INF/config/applicationContext.xml" 
    ); 

(i percorsi sono relativi dalla directory di esecuzione)

+0

stavo pensando di eseguire il mio AdminTool usando webapp.war. Sarà possibile utilizzare FileSystemXmlApplicationContext? – marioosh

+0

@marioosh No, in una guerra hai gli stessi problemi di un barattolo: non ci sono file, solo voci. La guerra è schierata in un container servlet o in locale? –

+0

@Patrick Vorrei usare la classe AdminTool da .war senza la distribuzione. PS: Ho un progetto Maven: nuovo FileSystemXmlApplicationContext ("src/main/webapp/WEB-INF/config/applicationContext.xml"); funziona quando eseguo AdminTool in Eclipse – marioosh

1
private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "/WEB-INF/config/applicationContext.xml" 
    ); 
3

Questo è il motivo per cui io preferisco di mettere tutti i file di configurazione in classi cartella. Infatti, usando Maven, puoi mettere tutti questi file in src/main/resources. Quindi, nei file di test è possibile accedere come 'classpath: applicationContext.xml'.

0
private static final ApplicationContext ac = 
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml" 
); 
+2

Si prega di spiegare perché il codice riportato di seguito presenta problemi rispetto al codice precedente. – Phani

-1

andare alla proprietà> Percorso build Java> Origine del progetto controllare il percorso di classe e aggiungere la directory prima di WEB-INF nel classpath. sicuramente è lavoro

Problemi correlati