前言
在開發(fā)中,為了數(shù)據(jù)安全说贝,所有SQL語句肯定是用占位符的,但是在實際開發(fā)中慎颗,為了方便追蹤問題乡恕,經(jīng)常需要查看具體執(zhí)行的SQL語句內(nèi)容,而用了占位符之后哗总,每次真實執(zhí)行的語句只能靠自己根據(jù)參數(shù)拼接出來几颜,耗時耗力,所以需要一個方法輸出每次執(zhí)行的SQL語句讯屈,并且還是有參數(shù)的(替換了占位符),而Druid就支持此功能(Druid的主要功能可不是這個),所以此文主要講Springboot環(huán)境下使用Druid輸出可執(zhí)行SQL蛋哭,并且是使用的Springboot的默認日志配置格式,因為一旦修改了Springboot的日志配置格式涮母,輸出來的日志一般是沒有顏色區(qū)分的谆趾,如下:
而springboot默認配置的日志如下:
當然也可以自己配置出來顏色躁愿,只是我個人覺得springboot的默認配置已經(jīng)很好看了,不用再配置了
當然Springboot配置Druid輸出可執(zhí)行的SQL文檔太多了沪蓬,只是他們都需要配置日志本身彤钟,也就是配置后日志輸出的樣子我不喜歡,所以各種研究后跷叉,才有了此文(之前百度是真沒有找到用默認配置輸出的方法)
Druid 介紹
Druid是Java語言中最好的數(shù)據(jù)庫連接池逸雹。Druid能夠提供強大的監(jiān)控和擴展功能。以上是官方的自我介紹云挟,也側(cè)面說明了Druid是一個功能強大梆砸,自帶監(jiān)控擴展的數(shù)據(jù)庫連接池,具體想了解Druid的話建議去全球最大的同性交友基地了解
配置
使用Springboot默認的日志配置文件园欣,意味著就沒有l(wèi)og4j.properties之類的文件給我們配置了帖世,那就只有在application.yml或者application.properties中配置springboot告訴它我們哪些地方需要打印日志,需要打印什么級別的日志
首先要配置連接池為Druid
spring:
application:
name: admin-managee
datasource:
druid:
url: jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=CTT
username: test
password: test
driver-class-name: com.mysql.cj.jdbc.Driver
使用Druid連接池跟之前不同的是多了一層druid沸枯,而其他的配置則是一樣的
而之前用代碼或者xml配置druid都在druid這個層級下日矫,包括輸出可執(zhí)行SQL如下:
filters: stat,wall,stat,slf4j,default
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: true
login-username: Raye
login-password: 123456
filter:
slf4j:
enabled: true
statement-create-after-log-enabled: false
statement-log-enabled: false
statement-executable-sql-log-enable: true
statement-log-error-enabled: true
result-set-log-enabled: false
其中只要statement-executable-sql-log-enable配置為true,則可以輸出可執(zhí)行SQL绑榴,當然如果不想用slf4j輸出日志哪轿,用log4j只需要吧slf4j替換成log4j即可,不過還是推薦使用slf4j彭沼,至于為什么使用slf4j缔逛,百度很多人都已經(jīng)說的很好了,另外druid的其他配置說明也請移步專業(yè)的druid文章姓惑,他們寫的更加詳細
完整配置如下:
spring:
application:
name: admin-managee
datasource:
druid:
url: jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=CTT
username: test
password: test
driver-class-name: com.mysql.cj.jdbc.Driver
filters: stat,wall,stat,slf4j,default
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: true
login-username: test
login-password: 123456
filter:
slf4j:
enabled: true
statement-create-after-log-enabled: false
statement-log-enabled: false
statement-executable-sql-log-enable: true
statement-log-error-enabled: true
result-set-log-enabled: false
logging:
level:
druid:
sql:
Statement: DEBUG
ps:之前忘記了logging level的配置褐奴,感謝2樓提出