成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

當我準備用SpringEvent優雅的解耦時,連續兩個Bug把我搞懵了

數據庫 其他數據庫
P6Spy是一個輕量級框架,只需簡單配置,就可以無縫地攔截和記錄數據庫執行sql以及耗時,而無需對現有應用程序進行代碼更改。其原理是包裝原有的數據源,在SQL執行前后做一些功能增強。

簡介

P6Spy是一個輕量級框架,只需簡單配置,就可以無縫地攔截和記錄數據庫執行sql以及耗時,而無需對現有應用程序進行代碼更改。其原理是包裝原有的數據源,在sql執行前后做一些功能增強。

執行效果如圖

集成方式

P6Spy提供了3種集成方式:

  1. Datasource way:如果我們的項目中使用了自定義的Datasource,可以使用P6DataSource對原有的數據源進行包裝,只需將自定義的DataSource傳入P6DataSource的構造函數中即可,這也是使用P6Spy最簡單的一種方式。
  2. Connection URL way:由于我們一般都是用框架提供的數據源,所以P6Spy也提供了對鏈接進行包裝的功能。只要在配置數據源時,稍微修改配置的屬性,即可使用P6Spy的功能。
  3. Spring Boot autoconfiguration:隨著Spring boot的流行,P6Spy還提供了基于Springboot的自動配置。

如何使用

本節主要針對第2種方式的使用進行講解。

步驟一,引入P6Spy。

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

步驟二,修改數據源的配置。

spring:
datasource:
//此處的URL增加了p6spy
url: jdbc:p6spy:mysql://127.0.0.1:3306/dbName
username: username
password: pwd123456
//將普通的MySQL驅動替換為P6SpyDriver
driver-class-name: com.p6spy.engine.spy.P6SpyDriver

步驟三,新建spy.properties文件,放在resources目錄下。

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
//注意此行配置
logMessageFormat=com.shishan.demo2023.bean.P6SpyMessageFormattingStrategy
appender=com.p6spy.engine.spy.appender.Slf4JLogger
deregisterdrivers=true
useprefix=true
excludecategories=info,debug,result,resultset
dateformat=yyyy-MM-dd HH:mm:ss
outagedetection=true
outagedetectioninterval=2
filter=true
exclude=QRTZ_JOB_DETAILS,QRTZ_TRIGGERS,QRTZ_CRON_TRIGGERS,QRTZ_LOCKS,QRTZ_FIRED_TRIGGERS,QRTZ_PAUSED_TRIGGER_GRPS,QRTZ_SCHEDULER_STATE

需要注意配置參數logMessageFormat,這里需要指定一個類,這個類實現MessageFormattingStrategy即可自由打印我們的sql。

步驟四,新建一個類實現MessageFormattingStrategy,并重寫formatMessage方法。

@Slf4j
public class P6SpyMessageFormattingStrategy implements MessageFormattingStrategy {

@Override
public String formatMessage(int connectionId, String now, long elapsed,
String category, String prepared, String sql, String url) {
//執行時間大于1000ms時,打印慢sql
if (elapsed > 1000) {
log.warn("slow sql,耗時:{}ms,sql:{}", elapsed, sql.replaceAll("[\\s]+", " "));
}
return StrUtil.format("耗時:{}ms,Sql:{}",
elapsed,
category.equals("commit") || category.equals("rollback") ? category :
sql.replaceAll("[\\s]+", " "));
}
}

formatMessage方法提供了7個參數,這7個參數大家可以自由組合,其中常用的參數有elapsed和sql。

簡單介紹一下這7個參數的具體含義:
connectionId:當前connection的id。

now:當前時間,毫秒值。

elapsed:sql執行的耗時。需要注意的是這里的耗時指的是從發送sql到服務器截止到收到服務器響應結果的總耗時,而不是sql本身在服務器的執行時間。

category:操作的類型,比如查詢,更新,commit,rollback等。

prepared:編譯后的sql,不打印具體的參數。

sql:具體的執行sql,參數占位符會被真正的參數值替換。

url:當前的數據庫連接。

效果

經過以上4個步驟,P6Spy就可以幫助我們自動打印執行的sql了。我們新建一個controller看看具體的效果。

@RestController
@RequestMapping(value = "/demo")
public class DemoController {

@Resource
private UserRepository userRepository;

@RequestMapping(value = "/test")
public ResponseEntity<Object> test() {
User user = new User();
user.setName("張三");
user.setPwd("123");
User save = this.userRepository.save(user);
System.out.println(JSON.toJSONString(save));

Iterable<User> all = this.userRepository.findAll();
all.forEach(value -> System.out.println(JSON.toJSONString(value)));
return ResponseEntity.ok().build();
}
}

啟動項目,訪問
http://localhost:8080/demo/test,看一下控制臺的打印效果:

與Mybatis Plus的集成

由于很多的Spring項目也使用了Mybatis Plus,所以MP也提供了對P6Spy的支持。使用方式也很簡單,只需對步驟二稍微做一點修改即可。

spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/db
username: username
password: pwd123456
driver-class-name: com.mysql.cj.jdbc.Driver
//增加一個配置即可使用p6spy的功能
p6spy:true

最后

P6Spy通過對數據源的包裝,進而實現了一系列的功能增強,讓我們可以方便的打印sql執行情況。但是相應的,如果在生產環境開啟p6spy的打印功能,對性能還是由一定的影響的。

建議大家在測試環境開啟此功能,對跟蹤、修復bug都很有幫助。

責任編輯:姜華 來源: 今日頭條
相關推薦

2024-11-11 14:57:56

JWTSession微服務

2024-11-19 08:36:16

2024-01-12 16:20:04

2019-09-27 09:13:55

Redis內存機制

2025-04-18 03:02:00

2013-06-19 09:49:28

編程學習

2012-09-20 09:24:36

編程學習編程開發

2021-07-19 08:41:49

藍屏用戶Bug

2017-11-15 09:32:27

解耦戰術架構

2024-10-12 13:51:22

2020-04-07 16:25:39

微信深色模式黑色模式

2025-03-24 08:00:00

數據庫開發代碼

2012-04-11 13:46:54

IEEEWi-Fi802.11ac

2022-05-16 08:42:26

Pandasbug

2022-05-31 08:35:05

RocketMQACK客戶端

2021-04-08 15:12:03

碼農開發CTO

2023-04-21 18:48:18

谷歌人工智能開源

2021-09-13 08:41:52

職場互聯網自閉

2022-09-02 08:23:12

軟件開發解耦架構

2020-11-20 15:22:32

架構運維技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品乱码久久久久久按摩 | 久久一区二区三区电影 | 日本三级日产三级国产三级 | 午夜精品一区二区三区在线观看 | 成人精品国产 | 中文字幕一二三 | 国产精品久久久久久久久久免费 | 久久亚洲一区二区 | 香蕉久久久 | 欧美一级高潮片免费的 | 国产h视频| 99热在线免费 | 免费观看一级特黄欧美大片 | 欧美极品视频在线观看 | 成人午夜在线 | 成人在线电影在线观看 | 黄色在线免费播放 | 九九看片 | yiren22综合网成人 | 欧美日韩中文字幕 | 视频一区 亚洲 | 久久久.com| 奇米影视在线 | 久久国产精品网站 | 99久久免费精品视频 | av毛片| 亚洲精品第一国产综合野 | 中文字幕在线观看一区 | 91精品久久久久久久久久小网站 | 日韩一区二区三区在线观看视频 | 夜夜骚视频| 亚洲精品乱码久久久久久久久 | 欧美www在线观看 | 91成人在线 | 七七婷婷婷婷精品国产 | 欧美自拍另类 | 欧美成人免费在线 | 亚洲444kkkk在线观看最新 | 久久久久久久久久毛片 | 欧美色欧美亚洲另类七区 | 国产视频久久久久 |