【问题标题】:Using the Spring dataSource in a logback DBAppender在 logback DBAppender 中使用 Spring 数据源
【发布时间】:2013-10-27 20:54:36
【问题描述】:

我有一个使用 Spring 设置连接池数据源的 webapp,如下所示:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${jdbc.driverClassName}" />
    <property name="jdbcUrl" value="${jdbc.url}" />
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />

该应用还使用 logback 将事件直接记录到数据库中。 Logback 在 logback.xml 文件中使用 DBAppender 进行配置:

  <appender name="eventsDB" class="ch.qos.logback.classic.db.DBAppender">
    <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
      <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <driverClass>${jdbc.driverClassName}</driverClass>
        <jdbcUrl>${jdbc.url}</jdbcUrl>
        <user>${jdbc.username}</user>
        <password>${jdbc.password}</password>
      </dataSource>
    </connectionSource>
  </appender>

如您所见,我们设置了两次数据源,并且在每种情况下都需要单独的属性替换。让 Spring 创建数据源并将其传递给 logback DBAppender 会好得多。

谁能建议最好的方法?

【问题讨论】:

    标签: spring datasource logback


    【解决方案1】:

    一种选择是以编程方式将其配置为 bean:

    @Bean
    public DBAppender dbAppender(DataSource dataSource){
        DBAppender dbAppender = new DBAppender();
        DataSourceConnectionSource connectionSource = new DataSourceConnectionSource();
        connectionSource.setDataSource(dataSource);
        connectionSource.start();
        dbAppender.setConnectionSource(connectionSource);
        dbAppender.start();
    
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger logger = loggerContext.getLogger("ROOT");
        logger.addAppender(dbAppender);
    
        return dbAppender;
    }
    

    这当然意味着它不会记录在这个 bean 创建之前发生的任何事件。

    【讨论】:

    • 我必须添加 connectionSource.setContext(loggerContext); 并将 loggerContext 变量初始化移到 connectionSource.start() 之前才能工作。
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多