boxmoe_header_banner_img

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

文章导读

Spring Boot 2.x 多数据源配置与 P6Spy 集成指南


avatar
作者 2025年9月14日 8

Spring Boot 2.x 多数据源配置与 P6Spy 集成指南

本文旨在指导开发者如何在 spring Boot 2.x 项目中配置多个数据源,并集成 P6Spy 数据库监控工具。通过详细的配置步骤和示例代码,帮助读者解决在集成过程中可能遇到的问题,实现对多个数据源的性能监控和sql语句的拦截。

多数据源配置

spring boot 提供了方便的多数据源配置方式,允许应用连接到多个数据库。以下是一个基于 application.yaml 配置文件的示例:

app:   db1:     jdbc-url: jdbc:mysql://localhost:3306/db1?serverTimezone=UTC     username: user1     password: password1   db2:     jdbc-url: jdbc:postgresql://localhost:5432/db2     username: user2     password: password2

对应的 Java 配置类如下:

import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;  import javax.sql.DataSource;  @Configuration(proxyBeanMethods = false) public class DataSourceConfig {      @Bean(name = "db1")     @Primary     @ConfigurationProperties("app.db1")     public DataSource db1DataSource() {         return DataSourceBuilder.create().build();     }      @Bean(name = "db2")     @ConfigurationProperties("app.db2")     public DataSource db2DataSource() {         return DataSourceBuilder.create().build();     } }

在这个配置中,@ConfigurationProperties 注解会将 application.yaml 中以 app.db1 和 app.db2 开头的属性绑定到对应的 DataSource 实例。@Primary 注解指定 db1 数据源为默认数据源。

在需要使用特定数据源的地方,可以使用 @Autowired 和 @Qualifier 注解来注入:

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service;  import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException;  @Service public class MyService {      @Autowired     @Qualifier("db2")     private DataSource db2DataSource;      public void doSomethingWithDb2() throws SQLException {         try (Connection connection = db2DataSource.getConnection()) {             // 使用 db2 连接执行数据库操作             System.out.println("Connected to db2: " + connection.getMetaData().getURL());         }     } }

集成 P6Spy

P6Spy 是一个开源的 Java EE 数据库监控工具,可以拦截和记录 SQL 语句,方便开发者进行性能分析和问题排查。

添加依赖

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

Spring Boot 2.x 多数据源配置与 P6Spy 集成指南

通义万相

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

Spring Boot 2.x 多数据源配置与 P6Spy 集成指南604

查看详情 Spring Boot 2.x 多数据源配置与 P6Spy 集成指南

<dependency>     <groupId>p6spy</groupId>     <artifactId>p6spy</artifactId>     <version>3.9.1</version> </dependency>

请根据实际情况选择合适的 P6Spy 版本。

配置 spy.properties

P6Spy 的配置文件 spy.properties 用于配置 P6Spy 的行为。需要在 src/main/resources 目录下创建该文件,并添加以下配置:

driverlist=com.mysql.cj.jdbc.Driver,org.postgresql.Driver modulelist=com.p6spy.engine.spy.module.P6SpyModule appender=com.p6spy.engine.spy.appender.StdoutLogger logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat dateformat=yyyy-MM-dd HH:mm:ss excludepattern=.*schema_version.*
  • driverlist: 指定需要监控的数据库驱动列表。请根据实际使用的数据库驱动进行配置。多个驱动之间用逗号分隔。
  • modulelist: 指定 P6Spy 使用的模块。
  • appender: 指定日志输出方式,这里使用标准输出。
  • logMessageFormat: 指定日志消息格式。
  • dateformat: 指定日期格式。
  • excludepattern: 指定需要排除的sql语句,使用正则表达式

配置数据源

修改 DataSourceConfig 类,使用 P6DataSource 包装数据源:

import com.p6spy.engine.spy.P6DataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;  import javax.sql.DataSource;  @Configuration(proxyBeanMethods = false) public class DataSourceConfig {      @Bean(name = "db1")     @Primary     @ConfigurationProperties("app.db1")     public DataSource db1DataSource() {         DataSource dataSource = DataSourceBuilder.create().build();         return new P6DataSource(dataSource);     }      @Bean(name = "db2")     @ConfigurationProperties("app.db2")     public DataSource db2DataSource() {         DataSource dataSource = DataSourceBuilder.create().build();         return new P6DataSource(dataSource);     } }

或者,可以使用 DataSourceBuilder 指定 type 为 P6DataSource.class,但需要确保 spy.properties 中配置了 realdatasource 属性,指向真实数据源的 JNDI 名称或类名。 推荐使用上面的方法,直接包装 DataSource。

注意事项

  • 确保 spy.properties 文件存在于 src/main/resources 目录下。
  • driverlist 属性需要包含所有使用到的数据库驱动。
  • 如果使用 JNDI 数据源,需要在 spy.properties 中配置 realdatasource 属性。
  • P6Spy 会拦截所有通过 DataSource 获取的连接执行的 SQL 语句,并将其输出到配置的日志输出方式中。

总结

通过以上步骤,就可以在 Spring Boot 2.x 项目中成功配置多个数据源,并集成 P6Spy 进行数据库监控。 这种方式可以方便地监控和分析数据库的性能,帮助开发者及时发现和解决问题。 请根据实际情况调整配置,以满足项目的需求。



评论(已关闭)

评论已关闭