调试Spring配置

jpr*_*ova 60 java websphere configuration spring hibernate

我正在开发一个使用Spring和Hibernate并在Websphere上运行的Java应用程序.我遇到了一个问题,我希望Spring将Dao加载到我的对象中,但由于某种原因,这种情况不会发生.(用同样的方式指定的另一个Dao被装好了.)

问题是 - 我如何调试Spring如何决定加载什么?我可以打开Spring的日志记录,在哪里?

Pra*_*nti 62

是的,Spring框架日志记录非常详细,如果您已经在使用日志框架,那么您在帖子中没有提到.如果您正在使用log4j,那么只需将spring appender添加到log4j配置(即log4j.xml或log4j.properties),如果您使用的是log4j xml配置,则可以执行以下操作:

<category name="org.springframework.beans">
    <priority value="debug" />
</category>
Run Code Online (Sandbox Code Playgroud)

要么

<category name="org.springframework">
    <priority value="debug" />
</category>
Run Code Online (Sandbox Code Playgroud)

我建议你使用JUnit测试单独测试这个问题,你可以通过将spring测试模块Junit结合使用来实现.如果您使用spring test模块,它将为您完成大部分工作,它会根据您的上下文配置加载上下文文件并启动容器,这样您就可以专注于测试业务逻辑.我在这里有一个小例子

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:springContext.xml"})
@Transactional
public class SpringDAOTest 
{
    @Autowired
    private SpringDAO dao;

    @Autowired
    private ApplicationContext appContext;

    @Test
    public void checkConfig()
    {
        AnySpringBean bean =  appContext.getBean(AnySpringBean.class);
        Assert.assertNotNull(bean);
    }
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我不建议您更改加载日志记录的方式,但在开发环境中尝试此操作,将此代码段添加到web.xml文件中

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

更新log4j配置文件


我在我的本地tomcat上测试了这个,它在应用程序启动时生成了很多日志.我也想做一个修正:使用debug不是信息,如@Rayan Stewart所说.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{HH:mm:ss} %p [%t]:%c{3}.%M()%L - %m%n" />
        </layout>
    </appender>

    <appender name="springAppender" class="org.apache.log4j.RollingFileAppender"> 
        <param name="file" value="C:/tomcatLogs/webApp/spring-details.log" /> 
        <param name="append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{MM/dd/yyyy HH:mm:ss}  [%t]:%c{5}.%M()%L %m%n" />
        </layout>
    </appender>

    <category name="org.springframework">
        <priority value="debug" />
    </category>

    <category name="org.springframework.beans">
        <priority value="debug" />
    </category>

    <category name="org.springframework.security">
        <priority value="debug" />
    </category>

    <category
        name="org.springframework.beans.CachedIntrospectionResults">
        <priority value="debug" />
    </category>

    <category name="org.springframework.jdbc.core">
        <priority value="debug" />
    </category>

    <category name="org.springframework.transaction.support.TransactionSynchronizationManager">
        <priority value="debug" />
    </category>

    <root>
        <priority value="debug" />
        <appender-ref ref="springAppender" />
        <!-- <appender-ref ref="STDOUT"/>  -->
    </root>
</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)


Ant*_*iev 6

如果使用Spring Boot,还可以通过使用--debug标志启动应用程序来启用“调试”模式。

java -jar myapp.jar --debug
Run Code Online (Sandbox Code Playgroud)

您还可以在application.properties中指定debug = true。

启用调试模式后,将配置一些核心记录器(嵌入式容器,Hibernate和Spring Boot)以输出更多信息。启用调试模式不会将您的应用程序配置为记录所有具有DEBUG级别的消息。

或者,您可以通过使用--trace标志(或application.properties中的trace = true)启动应用程序来启用“跟踪”模式。这样做可以为某些核心记录器(嵌入式容器,Hibernate模式生成以及整个Spring产品组合)启用跟踪记录。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html