3

我正在寻找 Spring 和 Log4J 之间的一些集成,因为我在 Spring 中有我的数据库连接:

<bean id="dataSourceOracle" 
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="" />
        <property name="username" value="" />
        <property name="password" value=""/>
</bean>

并在我的 Log4J 中有一个 JDBCAppender,如下所示:

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:mysql://server/db
log4j.appender.DB.user=user
log4j.appender.DB.password=pwd

但是,我不想在数据库中有 2 个寄存器……我如何在 Log4J 中使用 Spring 的数据源?有没有办法整合这部分?

4

2 回答 2

0

做你想做的事不是 log4j 的目的。

但是您可以使用PropertyPlaceholderConfigurer类将部署细节外部化到属性文件中,并通过特殊格式从 bean 配置文件访问 - ${variable}

弹簧文件

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

创建一个属性文件(database.properties),包含您的数据库详细信息,将其放入您的项目类路径中。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=password
于 2013-04-26T20:33:16.237 回答
0

您可以扩展 JDBCAppender 类并覆盖“getConnection(Connection con)”方法。那里说:

“覆盖它以与您的连接池系统链接。”

在 Spring 文件中创建一个 bean,以编程方式配置 Log4j(参见此处),添加新的 appender 并在之前注入池连接。

于 2013-04-26T20:38:28.713 回答