2013-12-21 61 views
1

我正在开发为客户端提供REST API的应用程序,为此我决定使用JAX-RS实现JerseySpring进行一些依赖注入。Spring + JAX.RS - 上下文加载两次

今天,我发现在我的日志,我的应用程序上下文似乎被加载两次,例如:

2013-12-21 22:18:55 INFO ContextLoader:272 - Root WebApplicationContext: initialization started 
2013-12-21 22:18:55 INFO ContextLoader:272 - Root WebApplicationContext: initialization started 

我通过similiar的职位看,但看到我的web.xml文件,我似乎无法找到罪魁祸首:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

<display-name>Spring MVC Application</display-name> 

<servlet> 
    <servlet-name>RestPowtorkiServlet</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>org.powtorki.spring.PowtorkiApplication</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>RestPowtorkiServlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>classpath:log4j.properties</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

<!-- 
    Apply Spring Security Filter to all REST Requests 
--> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/rest/*</url-pattern> 
</filter-mapping> 

而且我试着从Jersey库运行示例应用程序(https://github.com/jersey/jersey/tree/2.4.1/examples/helloworld-spring-webapp),它似乎正在遭受同样的问题。

它是否与Jersey集成Spring?如果是的话有什么方法可以解决它?

编辑: log4j配置:

# Root logger option 
log4j.rootLogger=DEBUG, stdout 
log4j.category.org.springframework.data.document.mongodb=DEBUG,stdout 
log4j.logger.org.springframework.web.context.ContextLoader=DEBUG,stdout 

# Direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
+0

请发表您的记录器配置其相加标志设置为false。 –

+0

在原始文章编辑中添加了它。 – Andna

回答

3

有一个的log4j Appender属性称为。它被描述为

记录℃的日志语句的输出将所有附加目的地 C和它的祖先。这是术语“appender 可加性”的含义。

然而,如果记录器C的祖先,称P,具有可加性标志 设置为false,那么C的输出将被定向到 C及其祖先高达和包括P个而不是追加程序中的所有追加程序P.

的祖先的

因此您的登录org.springframework.web.context.ContextLoader声明还将前往rootLogger这是其母公司。

您可以通过将

log4j.additivity.org.springframework.web.context.ContextLoader=false 
+0

谢谢!它现在似乎在工作。 – Andna