在Spring MVC webapp中添加系统属性

时间:2014-12-31 15:44:11

标签: java hibernate spring-mvc log4j2

我在Spring MVC webapp中使用Hibernate 4.3.7.Final和Log4j2,通过Tomcat 7发布。所有配置都是通过JavaConfig完成的(即没有web.xml或其他XML配置文件)。

默认情况下,Hibernate日志记录不会通过Log4j,原因如Apache wiki中所述。为了解决这个问题,我需要创建一个系统设置如下:

System.setProperty("org.jboss.logging.provider", "slf4j");

由于我的应用程序是webapp,因此没有主线程,因此我不确定将System.setProperty调用放在何处。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以在上下文侦听器中定义此系统属性,这是第一个入口点,如下所示:

@WebListener
public class ContextListenerExample implements ServletContextListener {
    public void contextInitialized(ServletContextEvent e){
        System.setProperty("org.jboss.logging.provider", "slf4j");
    }
}

您甚至可以使用spring定义系统属性,如下所示:

<bean id="setupJBossLoggingProperty"
    class="org.springframework.batch.support.SystemPropertyInitializer"
       p:keyName="org.jboss.logging.provider" p:defaultValue="slf4j"/>

然后你可以这样说:

<bean id="entityManagerFactory"
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
     depends-on="setupJBossLoggingProperty">
 ...

所以这意味着将首先设置系统属性,然后初始化hibernate bean。

答案 1 :(得分:1)

如果你使用一些WebApplicationInitializer实现来引导你的Spring应用程序(我假设你是因为你没有web.xml)你可以把它放在onStartup()这样的方法中:

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    System.setProperty("org.jboss.logging.provider", "slf4j");
}