2008-11-17 13 views
5

Używam wtrysku zależnego Spring, ale napotykam trudności w ładowaniu zasobu w moim pliku konfiguracyjnym Spring.konfiguracja fasoli sprężynowej

Zasób jest plikiem XML i znajduje się w pliku JAR w ścieżce klas. Staram się do niego dostęp w następujący sposób:

<import resource="classpath:com/config/resources.xml" /> 

jednak ciśgle spotykając się następujący błąd:

Failed to import bean definitions from URL location [classpath:com/config/resources.xml]

Plik JAR jest na ścieżce klasy projektu Java, który jest z kolei używany przez mojego Aplikacja internetowa. Czy naprawdę powinienem wykonywać swoją wiosenną konfigurację w projekcie internetowym, w przeciwieństwie do projektu Java, czy to ma znaczenie?

Odpowiedz

10

Jeśli musi znajdować się w ścieżce klas aplikacji webowej, powinieneś trzymać plik JAR zawierający plik konfiguracyjny w swoim katalogu WEB-INF/lib.

Jeśli używasz webapp, to wspólna konwencja jest użycie ContextLoaderListener aby zapewnić WebApplicationContext jest włożona do standardowego miejsca w ServletContext:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/com/config/resources.xml</param-value> 
</context-param> 

Następnie użyj WebApplicationContextUtils łowić kontekst aplikacji z kontekstu serwletu przy użyciu:

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); 
0

naprawdę nie pamiętam dlaczego to sprawy, ale spróbuj umieścić gwiazdkę () przed dwukropkiem (:) ścieżce klasy:/IF jes s nie działa, spróbuj gwiazdki za dwukropkiem (classpath: *), chociaż myślę, że było to przed dwukropkiem.

+0

Myślę, że odnosisz się do tego: http://static.springframework.org/spring/docs/2.5.x/reference/resources.html#resources-classpath-wildcards –

0

Użyłem tylko dyrektywy <import> w J2SE i działa bez prefiksu classpath:, po prostu jako <import resource="config/resources.xml" />. Ale w J2EE, jeśli wszystkie twoje pliki znajdują się wewnątrz WEB-INF, powinny być podobne, po prostu zaimportuj resource = "bla.xml" i powinno go znaleźć, chociaż w J2EE nie musisz tego robić, ponieważ w web.xml jesteś może zdefiniować kilka plików w parametrze kontekstowym contextConfigLocation wewnątrz pliku web.xml, po prostu oddzielić je spacjami lub znakami nowej linii.

1

Wpadłem na podobny problem z wtyczką red5. Rozwiązałem go tak:

try { 
    subContext = new FileSystemXmlApplicationContext(new String[] { "classpath*:/myconfig.xml" }, true, context); 
} catch (Exception fnfe) { 
    subContext = new FileSystemXmlApplicationContext(new String[] { "plugins/myconfig.xml" }, true, context); 
} 

Najpierw będzie to wyglądać w całej ścieżce klasycznej, w tym w słoiku zawierającym mój kod. Jeśli wystąpi wyjątek, katalog wtyczki jest zaznaczony. To może nie być najlepsze rozwiązanie, ale działa.

Powiązane problemy