2017-07-27 101 views
1

Project Directory 我們正在開發Spring MVC項目。我們想要在部署EAR時初始化所有的bean。以下是我們的web.xml文件:Spring beans在Spring Web應用程序中初始化兩次

<servlet> 
    <servlet-name>Spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>Spring</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 


    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/Spring-servlet.xml</param-value> 
    </context-param> 

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

下面是我們的Spring配置文件:

<context:component-scan base-package="com"></context:component-scan> 
<context:annotation-config></context:annotation-config> 
<mvc:annotation-driven></mvc:annotation-driven> 

<!-- Switch on the Caching --> 
<cache:annotation-driven /> 

<!-- Do the component scan path --> 
<!-- <context:component-scan base-package="caching" /> --> 
<bean id="ehcache" 
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
    p:configLocation="WEB-INF/ehcache.xml" p:shared="true" /> <!-- Why changed to true? https://stackoverflow.com/a/16370326 --> 

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" 
    p:cacheManager-ref="ehcache" /> 

<!-- creating datasource --> 
<bean id="dataSourceForFilters" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.mariadb.jdbc.Driver" /> 
    <property name="url" value="jdbc:mariadb://ip:3306/demo" /> 
    <property name="username" value="remote" /> 
    <property name="password" value="password" /> 
</bean> 
<bean id="dataSourceForData" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:/misoracle"></property> 
</bean> 

<!-- creating jdbctemplate and injecting datasource into it --> 
<bean id="jdbcTemplateForFilters" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSourceForFilters"></property> 
</bean> 
<bean id="jdbcTemplateForData" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSourceForData"></property> 
</bean> 
<!-- end --> 

<bean id="applicationContextProvider" class="com.providers.ApplicationContextProvider"></bean> 

我們正在使用組件註解(@控制器,@服務,@庫)定義豆類。

在將EAR部署到服務器時,Beans按照我們的要求進行初始化。

當我們用像'IP:port/context-root/rest'這樣的URL模式擊中應用程序時,Spring bean會再次初始化。

爲什麼beans再次初始化,有人可以幫忙嗎?

+0

問題尋求幫助調試(「爲什麼不是這個代碼的工作?」)必須包括所期望的行爲,一個特定的問題或錯誤,最短在問題本身中重現它所需的代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建最小,完整和可驗證示例。 –

+0

分享你的spring-servlet.xml。並分享您的項目目錄和錯誤日誌。 – KayV

+0

@KayV編輯完成 – Yogendra123

回答

1

你的web.xml中映射應該是這樣的:

<servlet> 
    <servlet-name>Spring</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Spring</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/Spring-servlet.xml</param-value> 
</context-param> 
+0

感謝您的回答。你能解釋一下它是如何工作的,以及它現在的工作方式。 – Yogendra123

相關問題