2016-09-11 6 views
1

Log4j2 JDBC Appender может быть установлен с помощью объединенной фабрики соединений, которая определяется с помощью вызовов и метода (см log4j2 Appenders):log4j2 JDBC Appender с Spring

<ConnectionFactory class="net.example.db.ConnectionFactory" method="getDatabaseConnection" /> 

Использование Spring Я уже определен источник данных, который обеспечивая объединенное соединение:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="${db_driver_class}" /> 
    <property name="url" value="${db_jdbc_url}" /> 
    <property name="username" value="${db_username}" /> 
    <property name="password" value="${db_password}" /> 
    <property name="initialSize" value="10" /> 
    <property name="maxActive" value="100" /> 
    <property name="maxIdle" value="50" /> 
    <property name="minIdle" value="10" /> 
    <property name="validationQuery" value="select 1" /> 
    <property name="testOnBorrow" value="true" /> 

Я хотел бы использовать пул соединений Spring для JDBC-приложения. Любая идея, как это можно сделать?

благодаря

Raz

ответ

1

Я чесотки создать раствор 3 шага:

  1. Define боб в контексте яровой, которые обеспечивают доступ к данным источник
  2. Построить реализацию компонентов, которые обеспечивают желаемое соединение .
  3. Создайте статическую оболочку, доступ к которой можно получить приложением log4j JDBC.

первого шага - объявления боб:

<bean id="springConnection" class="com.dal.entities.SpringConnection" scope="singleton"> 
    <property name="dataSource" ref="myDataSource" /> 

2-й этап - реализация боб - это тоже просто:

class SpringConnection { 

private DataSource dataSource; 

public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

Connection getConnection() throws Exception { 
    return dataSource.getConnection(); 
} 

}

3-й части - обертка со статическим методом - это немного больше mplex:

public class SpringAccessFactory { 

private final SpringConnection springCon; 
private static ApplicationContext context; 

private interface Singleton { 
    final SpringAccessFactory INSTANCE = new SpringAccessFactory(); 
} 

private SpringAccessFactory() { 

    this.springCon = context.getBean(SpringConnection.class); 
} 

public static Connection getConnection() throws Exception { 
    return Singleton.INSTANCE.springCon.getConnection(); 
} 

public static void setContext(ApplicationContext context) { 
    SpringAccessFactory.context = context; 
} 

}

Есть - однако - 2 вопросы, которые я нашел до сих пор:

  • Вы должны инициализировать контекст пружины и отправить его в обертку (SpringAccessFactory.setConetxt) перед началом использования регистратора
  • инициализация контекста весны в начале программы может инициировать методы @PostConstruct (если они есть), прежде чем вы планируете это делать .....

 Смежные вопросы

  • Нет связанных вопросов^_^