boxmoe_header_banner_img

Hello! 欢迎来到悠悠畅享网!

文章导读

Spring Boot 2.x 多数据源集成 P6Spy 详细教程


avatar
作者 2025年9月14日 10

Spring Boot 2.x 多数据源集成 P6Spy 详细教程

本文旨在解决 spring Boot 2.x 项目中配置多个数据源,并集成 P6Spy 监控 sql 执行情况的问题。我们将探讨如何正确配置 P6Spy,避免常见的 IllegalArgumentException 和 P6DataSource 相关错误,最终实现对多个数据源的 SQL 语句进行监控。

P6Spy 集成步骤详解

spring boot 项目中集成 P6Spy 以监控 SQL 语句,需要进行以下步骤:

1. 添加 maven 依赖

首先,在 pom.xml 文件中添加 P6Spy 的 Maven 依赖:

<dependency>     <groupId>p6spy</groupId>     <artifactId>p6spy</artifactId>     <version>最新版本号</version> </dependency>

请务必替换 最新版本号 为 P6Spy 的最新版本。

2. 配置 spy.properties 文件

在 src/main/resources 目录下创建 spy.properties 文件,并配置 P6Spy 的相关属性。 关键配置包括:

  • driverlist: 指定需要监控的数据库驱动。如果使用多个数据库,需要将所有驱动都添加到该列表中,用逗号分隔。

    driverlist=com.mysql.cj.jdbc.Driver,org.postgresql.Driver

    这里示例了 MySQL 和 PostgreSQL 两种数据库驱动。

  • modulelist: 指定 P6Spy 使用的模块。默认使用 com.p6spy.engine.spy.module.P6SpyModule,一般无需修改。

  • outputformat: 指定输出格式。例如,BLOCK 表示以块状形式输出。

  • appender: 指定输出目的地。例如,com.p6spy.engine.spy.appender.StdoutLogger 表示输出到控制台。

    Spring Boot 2.x 多数据源集成 P6Spy 详细教程

    通义万相

    通义万相,一个不断进化的ai艺术创作大模型

    Spring Boot 2.x 多数据源集成 P6Spy 详细教程604

    查看详情 Spring Boot 2.x 多数据源集成 P6Spy 详细教程

一个典型的 spy.properties 文件示例如下:

driverlist=com.mysql.cj.jdbc.Driver modulelist=com.p6spy.engine.spy.module.P6SpyModule outputformat=BLOCK appender=com.p6spy.engine.spy.appender.StdoutLogger logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat customLogMessageFormat=%(currentTime)s | %(executionTime)ms | %(category)s | connection %(connectionId) | statement %(statementId) | %(sqlSingleLine)s

3. 配置 Spring Boot 数据源

在 Spring Boot 的配置文件(例如 application.yml 或 application.properties)中配置多个数据源。关键是使用 P6Spy 提供的驱动代理。

spring:   datasource:     db1:       url: jdbc:p6spy:mysql://localhost:3306/db1?serverTimezone=UTC       username: user1       password: password1       driver-class-name: com.p6spy.engine.spy.P6SpyDriver     db2:       url: jdbc:p6spy:postgresql://localhost:5432/db2       username: user2       password: password2       driver-class-name: com.p6spy.engine.spy.P6SpyDriver

注意:

  • url 必须以 jdbc:p6spy: 开头,后面跟上真实的 JDBC URL。
  • driver-class-name 必须设置为 com.p6spy.engine.spy.P6SpyDriver。
  • 确保在 spy.properties 文件中包含了 db1 和 db2 使用的数据库驱动。

4. 使用 @ConfigurationProperties 配置数据源

可以使用 @ConfigurationProperties 注解来配置数据源,并将其注入到 Spring 容器中。

@Configuration public class DataSourceConfig {      @Bean(name = "db1")     @Primary     @ConfigurationProperties("spring.datasource.db1")     public DataSource db1DataSource() {         return DataSourceBuilder.create().build();     }      @Bean(name = "db2")     @ConfigurationProperties("spring.datasource.db2")     public DataSource db2DataSource() {         return DataSourceBuilder.create().build();     } }

5. 使用数据源

通过 @Autowired 和 @Qualifier 注解,可以将指定的数据源注入到需要使用的地方。

@Autowired @Qualifier("db2") private DataSource db2DataSource;  @Autowired @Qualifier("db1") private DataSource db1DataSource;  @Autowired private JdbcTemplate jdbcTemplateDb1;  @Autowired private JdbcTemplate jdbcTemplateDb2;  @Bean public JdbcTemplate jdbcTemplateDb1(@Qualifier("db1") DataSource dataSource) {     return new JdbcTemplate(dataSource); }  @Bean public JdbcTemplate jdbcTemplateDb2(@Qualifier("db2") DataSource dataSource) {     return new JdbcTemplate(dataSource); }  // 使用 jdbcTemplateDb1 和 jdbcTemplateDb2 执行数据库操作

注意事项和总结

  • 确保 spy.properties 文件配置正确,特别是 driverlist 属性。
  • 在 Spring Boot 配置文件中,使用 jdbc:p6spy: 作为 URL 的前缀,并设置正确的 driver-class-name。
  • 使用 @ConfigurationProperties 可以方便地配置和管理多个数据源。
  • 如果遇到 IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required. 错误,检查是否正确配置了数据源的 URL 和驱动。
  • 如果遇到 P6DataSource: no value for Real Data Source Name, cannot perform jndi lookup 错误,确认是否使用了正确的 P6Spy 集成方式,建议直接使用 JDBC URL 的方式进行配置。
  • 配置完成后,启动应用程序,P6Spy 会将所有通过配置的数据源执行的 SQL 语句输出到控制台。

通过以上步骤,就可以成功地在 Spring Boot 2.x 项目中配置多个数据源,并使用 P6Spy 监控 SQL 语句的执行情况。 这对于调试和优化数据库性能非常有帮助。



评论(已关闭)

评论已关闭