首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring JDBC没有使用log4j记录SQL

您好!感谢您的提问。

Spring JDBC 是 Spring 框架中的一个模块,用于简化 JDBC 数据库访问。它提供了一个抽象层,使开发人员能够更容易地处理 JDBC 的复杂性,同时保持代码的简洁和可读性。

关于您的问题,Spring JDBC 本身并没有使用 log4j 记录 SQL 语句。但是,您可以通过配置 Spring JDBC 的 DataSource 来实现 SQL 语句的日志记录。您可以使用 Spring 提供的 CommonsLoggingSqlQueryLoggingListenerSlf4jQueryLoggingListener 来将 SQL 语句记录到 log4j 中。

以下是一个简单的示例,展示了如何使用 CommonsLoggingSqlQueryLoggingListener 记录 SQL 语句:

代码语言:java
复制
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {

    private static final Log logger = LogFactory.getLog(DataSourceConfig.class);

    @Bean
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
        dataSource.setUsername("myusername");
        dataSource.setPassword("mypassword");

        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource());
        jdbcTemplate.setFetchSize(100);
        jdbcTemplate.setQueryTimeout(60);

        // 添加 SQL 查询日志记录监听器
        jdbcTemplate.addResultSetListener(new CommonsLoggingSqlQueryLoggingListener(logger));

        return jdbcTemplate;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public DataSourceInitializer dataSourceInitializer() {
        DataSourceInitializer initializer = new DataSourceInitializer();
        initializer.setDataSource(dataSource());
        initializer.setDatabasePopulator(new ResourceDatabasePopulator(new ClassPathResource("schema.sql")));
        return initializer;
    }
}

在这个示例中,我们使用了 CommonsLoggingSqlQueryLoggingListener 来记录 SQL 语句。您可以将 logger 变量替换为您自己的 log4j 记录器,以便将 SQL 语句记录到 log4j 中。

希望这个答案能够帮助您解决问题。如果您有任何其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券