P6Spy は、アプリケーション内のデータ操作ステートメントを傍受して変更するために使用できるオープン ソース フレームワークです。
SQL ステートメントは、SQL ステートメントのレコーダーに相当する P6Spy を通じてインターセプトできるため、パフォーマンス分析などの関連分析に使用できます。
<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>
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
の SQL ログ出力を開きます。
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
@Data @NoArgsConstructor @AllArgsConstructor @TableName("course_1") public class Course { @TableField("cid") private Long cId; private String cName; private Integer userId; private String cStatus; }
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 オープン ソース製品を使用して行うことができます。
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 ログ印刷を使用します
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); } }
##テスト クラスは変更されません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
# の SQL ログ出力を開きます。
mybatis-plus:
configuration:
log-impl:org.apache.ibatis.logging.stdout.StdOutImpl
##
以上がSpringBoot が P6Spy を統合して SQL ロギングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。