Printemps - application Initialisé deux fois?
Quand je démarre mon printemps, mon application tomcat , le ContextRefreshedEvent
se déclenche deux fois. Veuillez voir le StackTrace.
Dec 20, 2013 6:07:56 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:SpringValidations' did not find a matching property.
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;F:\sub\svn\bin;%DERBY_HOME%\bin;D:\Lal\Lab\SW\apache-maven-3.0.4/bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.6.0_25\bin;;F:\Eclipse\sts-2.9.2.RELEASE;
Dec 20, 2013 6:07:56 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Dec 20, 2013 6:07:56 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 289 ms
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.16
Dec 20, 2013 6:07:56 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(F:\anand\Spring_Training\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\SpringValidations\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "org.springframework.web.context.ContextLoaderListener" is already configured for this context. The duplicate definition has been ignored.
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "org.springframework.web.util.Log4jConfigListener" is already configured for this context. The duplicate definition has been ignored.
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "org.springframework.web.context.ContextLoaderListener" is already configured for this context. The duplicate definition has been ignored.
Dec 20, 2013 6:07:56 PM org.apache.catalina.core.StandardContext addApplicationListener
INFO: The listener "org.springframework.web.context.ContextLoaderListener" is already configured for this context. The duplicate definition has been ignored.
log4j:WARN Continuable parsing error 108 and column 11
log4j:WARN The content of element type "logger" must match "(param*,level?,appender-ref*)".
log4j:WARN Continuable parsing error 114 and column 11
log4j:WARN The content of element type "logger" must match "(param*,level?,appender-ref*)".
Dec 20, 2013 6:07:57 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
--------------- Context Refreshed -----------------
:::::::::::::::::::::::: Now you can Start the Server Initialization ! :::::::::::::::::::::::::::::
Dec 20, 2013 6:07:57 PM org.apache.catalina.core.ApplicationContext log
INFO: Set web app root system property: 'webapp.root' = [F:\anand\Spring_Training\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\SpringValidations\]
Dec 20, 2013 6:07:57 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing log4j from [F:\anand\Spring_Training\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\SpringValidations\WEB-INF\classes\log4j.xml]
log4j:WARN Continuable parsing error 108 and column 11
log4j:WARN The content of element type "logger" must match "(param*,level?,appender-ref*)".
log4j:WARN Continuable parsing error 114 and column 11
log4j:WARN The content of element type "logger" must match "(param*,level?,appender-ref*)".
Dec 20, 2013 6:07:57 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'dispatcher'
--------------- Context Refreshed -----------------
:::::::::::::::::::::::: Now you can Start the Server Initialization ! :::::::::::::::::::::::::::::
Dec 20, 2013 6:07:58 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Dec 20, 2013 6:07:58 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Dec 20, 2013 6:07:58 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/16 config=null
Dec 20, 2013 6:07:58 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1659 ms
Mon Initialiseur de classe sera comme ,
public class ApplicationListenerBean implements ApplicationListener<ContextRefreshedEvent> {
private String message;
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("--------------- Context Refreshed -----------------");
System.out.println( ":::::::::::::::::::::::: " +message+ " :::::::::::::::::::::::::::::");
//Other stuff like logger Initialization , Server Initailization etc..
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Et mon applicationContext.xml sera comme ,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org./dtd/spring-beans.dtd">
<beans>
<bean id="test" class="com.pointel.applicationListener.ApplicationListenerBean">
<property name="message"
value="Now you can Start the Server Initialization !">
</property>
</bean>
</beans>
Mon web.xml sera ,
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>SpringValidations</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
</web-app>
Mon répartiteur-servlet sera comme,
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- Application Message Bundle -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- <property name="basename" value="/WEB-INF/messages/messages.properties" /> -->
<property name="basenames">
<list>
<value>/WEB-INF/messages/messages.properties</value>
<value>/WEB-INF/messages/mymessages.properties</value>
</list>
</property>
<property name="cacheSeconds" value="3000" />
</bean>
<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.pointel.controllers" />
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<!-- <context:annotation-config /> -->
<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views
directory -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
Est , je sais, Pourquoi l'--------------- Contexte Actualisé ----------------- message vient deux fois ?
Edit : je sais qu'il y a de nombreuses façons d'initialiser un printemps de l'application. Mais what is the best and the efficient way to initialize an Spring application like logger,Domain server startup to get protocol connection , stating the threads etc... ?
De l'espoir , vous pouvez comprendre ma question.
Publier vos
web.xml
et dispatcher-servlet.xml
(ou quoi que ce fichier se trouve être appelé)Keeling Veuillez voir mes modifications .
Veuillez voir mes modifications
jetez un oeil à la classe
org.springframework.context.SmartLifecycle
OriginalL'auteur Human Being | 2013-12-20
Vous devez vous connecter pour publier un commentaire.
Son être actualisés pour chaque contexte, de dispatching et de l'Application. Essayez d'exécuter ce test:
Pourquoi voudriez-vous que? Il est parfaitement normal.
Qu'essayez-vous de faire de démarrage de l'application? Dans une de mes applications que j'charger des listes qui sont partagées tout au long de l'ensemble de l'application. Lorsque le contexte est actualisée je viens de vérifier les listes ont été chargés. Est-il possible de déterminer l'état de l'opération que vous souhaitez effectuer, de sorte que vous pouvez exécuter conditionnellement?
Pouvez vous s'il vous plaît répondre à ma édité question ?
OriginalL'auteur Kevin Bowersox
Cela semble normal que Spring MVC de l'application ont généralement au moins deux contextes, voir ce réponse.
Dans ce cas, cette application a deux contextes différents qui servent à des fins différentes:
mondial Printemps contexte commun à l'ensemble de l'application
un servlet-niveau printemps contexte, qui contient tous les haricots associés à un même répartiteur de la servlet.
Un Spring MVC de l'application peut avoir plusieurs répartiteurs, chacun avec son propre contexte et qui partagent tous un parent cadre commun de l'ensemble de l'application des haricots.
Dans chaque répartiteur contexte, il y a des haricots spécifiques du répartiteur qui ne peut pas être injecté dans d'autres contextes et ni sur le contexte parent, par exemple tous les haricots annotée avec @Contrôleur.
Cela garantit que nous pouvons injecter de service et DAO haricots défini dans le contexte commun dans n'importe quel contrôleur, mais nous ne pouvons jamais injecter un contrôleur dans un service, ou contrôleurs/haricots à partir d'un répartiteur dans un autre répartiteur, en gardant les répartiteurs isolé.
Selon le journal, le premier contexte d'initialisation est la racine de contexte, et le deuxième contexte est le répartiteur contexte, ce qui est OK.
OriginalL'auteur Angular University
Que de très normal. Vous avez une application auditeur qui charge un le contexte, et vous avez une servlet qui se charge au démarrage et charge le contexte aussi. Supprimer charger au démarrage de la servlet dans la déclaration de web.xml. Vous web.xml deviendra tike ce :
OriginalL'auteur Houcem Berrayana
Vous semblez avoir deux
<ContextLoaderListener>
s est déclarée dans votreweb.xml
? Essayez de supprimer l'un de ces.OriginalL'auteur Will Keeling
Je crois que vous avez mal compris
ApplicationListener
. Il est utilisé pour écouter de chaque contexte d'application à des événements web app initialisation/destruction des événements. Essayez d'utiliserServletContextListener
à la place.Dans web.xml
StartupListener.java
OriginalL'auteur ramirezag