ホームページ  >  記事  >  Java  >  SpringBoot が P6Spy を統合して SQL ロギングを実装する方法

SpringBoot が P6Spy を統合して SQL ロギングを実装する方法

WBOY
WBOY転載
2023-05-15 12:10:061297ブラウズ

P6Spy の概要

P6Spy は、アプリケーション内のデータ操作ステートメントを傍受して変更するために使用できるオープン ソース フレームワークです。

SQL ステートメントは、SQL ステートメントのレコーダーに相当する P6Spy を通じてインターセプトできるため、パフォーマンス分析などの関連分析に使用できます。

アプリケーション シナリオ

pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
    </dependencies>

application.yml

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
#ドライバークラス名: com.p6spy.engine.spy.P6SpyDriver
タイプ: com.alibaba.druid.pool.DruidDataSource
URL: jdbc:mysql ://localhost:3306/course_db?serverTimezone=GMT+8
# URL: jdbc:p6spy:mysql://localhost:3306/course_db?serverTimezone=GMT+8
ユーザー名: root
パスワード: root

# mybatis-plus
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

の SQL ログ出力を開きます。

entity

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("course_1")
public class Course {
    @TableField("cid")
    private Long cId;
    private String cName;
    private Integer userId;
    private String cStatus;
}

Mapper

public interface CourseMapper extends BaseMapper<Course> {
}

スタートアップ クラス

@SpringBootApplication
@MapperScan(basePackages = "cn.zysheep.mapper")
public class ShardingjdbcdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShardingjdbcdemoApplication.class, args);
    }
}

テスト クラス

@SpringBootTest
@Slf4j
class ShardingjdbcdemoApplicationTests {
    @Autowired
    private CourseMapper courseMapper;
    @SneakyThrows
    @Test
    void findCourse() {
        courseMapper.selectList(null).forEach(System.out::println);
    }
}

mybatis-plus印刷された SQL ログは、私たちが望む効果ではありません。目的の SQL ログ出力を制御する方法は、P6Spy オープン ソース製品を使用して行うことができます。

SpringBoot が P6Spy を統合して SQL ロギングを実装する方法

P6Spy の開始

spy.properties

resources ディレクトリに構成ファイルを追加します。 log4j .xml に、構成情報を記録します

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# SQL ログの出力
# 1. logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
# 2. logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
# CustomLogMessageFormat=%(currentTime ) | SQL 使用時間: %(executionTime) ms | 接続情報: %(category)-%(connectionId) | SQL 実行: %(sql)
# 3. カスタム ログ出力 (完全修飾クラス名)
logMessageFormat=cn .zysheep.config.P6SPYConfig
# ログ システムを使用して記録する sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
## ログの構成 ログ例外
excludecategories= info,debug,result ,batc,resultset
# p6spy ドライバーをプロキシとして使用するように設定
deregisterdrivers=true
# 日付形式
dateformat=yyyy-MM-dd HH:mm:ss
# 実際のドライバー
driverlist=com.mysql.cj.jdbc.Driver
# 低速 SQL ログを有効にするかどうか
outagesetection=true
# 低速 SQL ログの標準秒数
outagesetectioninterval=2

P6Spy には、上記の構成ファイルに示すように、SQL 出力形式が組み込まれています。ここではカスタム SQL ログ印刷を使用します

P6SPYConfig

public class P6SPYConfig  implements MessageFormattingStrategy {
    @Override
    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        Map<String, Object> message = new LinkedHashMap<>(8);
        String newPrepared = prepared.replace("   ", "").replace("\n", " ");
        message.put("prepared", newPrepared);
        String newSql = sql.replace("   ", "").replace("\n", " ");
        message.put("sql", newSql);
        return JSONObject.toJSONString(message, true);
    }
}

application.yml

spring:
datasource:
# driver-class-name : com.mysql.cj.jdbc.Driver
ドライバークラス名: com.p6spy.engine.spy.P6SpyDriver
タイプ: com.alibaba.druid.pool.DruidDataSource
# url: jdbc: mysql ://localhost:3306/course_db?serverTimezone=GMT+8
URL: jdbc:p6spy:mysql://localhost:3306/course_db?serverTimezone=GMT+8
ユーザー名: root
パスワード: root

# mybatis-plus
mybatis-plus:
configuration:
log-impl:org.apache.ibatis.logging.stdout.StdOutImpl

# の SQL ログ出力を開きます。
##テスト クラスは変更されません

##

以上がSpringBoot が P6Spy を統合して SQL ロギングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。