2014-12-31 2 views
2

Я использую Hibernate 4.3.7.Final и Log4j2 в моем Spring MVC webapp, опубликованном через Tomcat 7. Вся конфигурация выполняется через JavaConfig (т. Е. Не существует web.xml или другой конфигурации XML файлы).Добавление системных свойств в Spring MVC webapp

По умолчанию протокол Hibernate не проходит через Log4j по причинам, указанным в Apache wiki. Для того, чтобы решить эту проблему нужно создать настройку системы следующим образом:

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

Поскольку мое приложение является веб-приложение не основной поток, и в результате я не знаете, куда поместить этот System.setProperty вызов. Любой совет будет принят во внимание.

+0

, которые веб-контейнера вы используете? – SMA

ответ

2

Вы могли бы определить эту систему собственности в контексте слушателя, который является первой точкой входа, как показано ниже:

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

Можно даже определить системное свойство с помощью пружины, как показано ниже:

<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"> 
... 

Таким образом, это означает, что системное имущество будет установлено fir st, а затем спящий компонент будет инициализирован.

+0

Я попытался добавить класс ContextListenerExample в свой проект, но должен был объявить его абстрактным. Однако, когда я запускаю свое веб-приложение MVC, я не вижу, чтобы приложение когда-либо достигало методов в контекстеInitialized. Есть ли что-то еще, что нужно добавить в проект? В моем конкретном случае я устанавливаю свойства trustStore и keyStore. – A21

1

Если вы используете некоторые WebApplicationInitializer реализации для начальной загрузки вашего Spring приложения (который я предполагаю, что вы так у вас нет web.xml) вы могли бы поставить его в onStartup() метод как это:

@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    System.setProperty("org.jboss.logging.provider", "slf4j"); 
} 
Смежные вопросы