成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

mybatis使用spring-druid數(shù)據(jù)源連接池配置log4j打印sql語句以及開啟監(jiān)控平臺(tái)

wenyiweb / 2314人閱讀

摘要:開啟德魯伊過濾,用于采集關(guān)聯(lián)監(jiān)控的數(shù)據(jù)對(duì)除了靜態(tài)資源外底所有路由進(jìn)行監(jiān)控,該監(jiān)控采集關(guān)聯(lián)監(jiān)控的數(shù)據(jù)。而前面對(duì)數(shù)據(jù)源監(jiān)控的配置,大部分是監(jiān)控。

雜七雜的雜

作為程序員,開發(fā)工程中,一套利于測(cè)試或者監(jiān)控的工具很重要,mybatis默認(rèn)沒有提供log4j的打印sql語句的配置。

這對(duì)于開發(fā)rest服務(wù),提供接口的開發(fā)者而言,是在很不好做,再加上mybatis很靈活,使用腳本動(dòng)態(tài)生成sql語句,因此,有時(shí)候真不知道運(yùn)行的sql是不是我們所期望的,過濾的條件是否起作用。

所幸,德魯伊監(jiān)控平臺(tái)是個(gè)不錯(cuò)的選擇,在性能方面druid連接池也比spring原生的要好,因此也是很多企業(yè)開發(fā)的首選數(shù)據(jù)源配置。

在引言階段,我們先看看目前我配置的結(jié)果是否是你想要的,如果不是你所期望的,就別浪費(fèi)時(shí)間往下面看,畢竟大家都時(shí)間有限,沒必要花費(fèi)時(shí)間看一些對(duì)自己沒用的東西。

控制臺(tái)打印的日志,慎重的告訴你,這種大量打印信息不能用于生產(chǎn)壞境,生產(chǎn)環(huán)境中這些信息寫到tomcat的日志文件中了{tomcat的目錄}/logs/catalina.out,如果訪問量很大的時(shí)候,一天產(chǎn)生幾個(gè)GB的日志不是問題--慎用。

[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Connection: {conn-10001} pool-connect
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} created. 
select * from t_login_register_st  WHERE 1 = 1   and ltime >= ?  order by ltime desc limit ?, ?
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} Parameters : [1463414400, 0, 15]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} Types : [BIGINT, INTEGER, INTEGER]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} executed. 6.503031 millis. 
select * from t_login_register_st  WHERE 1 = 1   and ltime >= ?  order by ltime desc limit ?, ?
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} open
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Header: [ltime, login_register, register, register_sent_code, register_edit, register_edit_publish, register_edit_succ, login, foget_passwd, foget_passwd_sent_code, login_succ, login_fail, login_succ_normal, login_succ_qq, login_succ_wx, login_succ_wb, login_succ_foget_passwd, login_fail_normal, login_fail_qq, login_fail_wx, login_fail_wb, login_fail_foget_passwd]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464624000, 604, 216, 117, 113, 109, 106, 931, 59, 9, 790, 150, 279, 148, 254, 93, 32, 117, 9, 26, 2, 2]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464537600, 639, 241, 132, 125, 121, 114, 998, 40, 11, 844, 130, 312, 168, 268, 87, 24, 107, 5, 18, 2, 2]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464451200, 674, 322, 175, 170, 160, 155, 1087, 46, 11, 923, 143, 310, 164, 339, 96, 26, 114, 6, 25, 3, 1]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464364800, 794, 371, 187, 182, 168, 162, 1330, 73, 17, 1153, 178, 307, 257, 455, 120, 34, 137, 11, 25, 6, 3]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464278400, 670, 295, 169, 162, 154, 118, 1197, 88, 12, 977, 229, 338, 185, 320, 120, 33, 135, 33, 54, 25, 1]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464192000, 709, 308, 172, 163, 159, 120, 1214, 56, 8, 1065, 292, 383, 196, 349, 122, 30, 148, 54, 78, 30, 1]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464105600, 666, 285, 153, 148, 141, 139, 1120, 75, 14, 970, 159, 328, 188, 294, 141, 38, 132, 11, 14, 3, 0]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1464019200, 586, 254, 146, 141, 136, 132, 1018, 60, 12, 884, 132, 307, 149, 295, 124, 31, 108, 3, 18, 3, 2]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463932800, 548, 209, 110, 106, 106, 103, 910, 68, 13, 779, 135, 306, 123, 251, 87, 33, 120, 4, 14, 1, 1]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463846400, 520, 197, 104, 100, 99, 94, 963, 46, 12, 827, 132, 289, 149, 261, 110, 26, 110, 4, 13, 5, 1]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463760000, 627, 237, 142, 134, 129, 122, 1190, 80, 23, 999, 173, 348, 182, 304, 137, 45, 137, 11, 22, 3, 2]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463673600, 678, 280, 150, 144, 133, 128, 1235, 75, 8, 1012, 184, 354, 187, 342, 126, 28, 153, 14, 16, 6, 1]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463587200, 564, 230, 138, 135, 131, 126, 1063, 53, 11, 901, 122, 337, 161, 274, 116, 27, 102, 3, 15, 3, 4]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463500800, 552, 212, 119, 112, 108, 106, 986, 46, 6, 833, 134, 332, 146, 254, 92, 23, 122, 6, 5, 1, 2]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} Result: [1463414400, 665, 234, 130, 124, 125, 121, 1165, 65, 13, 979, 159, 409, 143, 303, 116, 33, 145, 4, 6, 3, 2]
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.ResultSet: {conn-10001, pstmt-20025, rs-50025} closed
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Statement: {conn-10001, pstmt-20025} closed
[03/06/16 11:56:03:003 CST] http-nio-8080-exec-2 DEBUG sql.Connection: {conn-10001} pool-recycle

德魯伊監(jiān)控平臺(tái)的視圖:

圖一 SQL監(jiān)控

圖二 URI監(jiān)控

重要的話,重復(fù)一遍,如果目前所寫對(duì)現(xiàn)在的你沒用,就算以后可能會(huì)用到,你也沒必要細(xì)看下面所述,到此你已經(jīng)花費(fèi)了很多時(shí)間了,時(shí)間是金錢,傷不起。

如果你堅(jiān)持要看到這里,請(qǐng)收藏吧!

spring加載properties鍵值對(duì)

其實(shí)與spring的配置基本沒多大關(guān)系,但是因?yàn)槠浼虞d了數(shù)據(jù)庫的基本信息,所以兩個(gè)合在一起看一下。

spring-applicationContext.xml的部分配置:




    

    

    

    
        
        
        
            
                
                classpath:conf/properties/*.properties
            
        
    

properties文件的部分配置:

mysql.host=127.0.0.1 #你的數(shù)據(jù)庫主機(jī)
mysql.port=3306
mysql.database=test # 你的數(shù)據(jù)庫
mysql.user=test # 數(shù)據(jù)庫登錄用戶
mysql.pwd=123456 # 數(shù)據(jù)庫登錄密碼
mybatis.xml配置



    
    

    
    
        
    

    
    
    
    
          
        
        
        
        
        
        
        
        
        

        
        

        
        

        
        

        

        
        
        

        
        

        
        

        
        
        
        
        
        
            
                
                
            
        
        
        
    

    
    
        
        
        
        
        
    

    
        
        
    
    
    
    
    
    
        
            
            
            
            
            
            
        
    

    
        
            
        
    

    
    
        
        
        
        
    

    
        
        
    

上面的配置中,使用包裹的部分時(shí)今天配置的重點(diǎn),其它的配置時(shí)開發(fā)中的基本配置,也就是說基本的必須配置,不配置不能使用到spring提供的一些特性,當(dāng)然數(shù)據(jù)源是必須的配置,但是可以選擇spring的數(shù)據(jù)源連接,不一定是德魯伊的數(shù)據(jù)源連接池。

對(duì)于配種中看到的 注釋的部分更是本文講的重點(diǎn),也就是要讓程序在控制臺(tái)打印mybatis的sql語句,這些配置很重要。


    
        
        
    

這里是以代理模式過濾stat和log的,所以用的兩個(gè)bean分別是stat監(jiān)控,log日志記錄監(jiān)控。

這句的配置才是在控制臺(tái)打印sql的重點(diǎn),建議平時(shí)開發(fā)中,打開該配置,上線的時(shí)候關(guān)閉掉,原因就是上面提到的,寫日志很占空間。

關(guān)于druid數(shù)據(jù)源配置屬性的列表,請(qǐng)查看后面:druid連接池配置屬性列表詳解

web.xml配置


    
        contextConfigLocation
        classpath:META-INF/spring/*.xml
    
    
    
    
        log4jConfigLocation
        WEB-INF/classes/log4j.xml
    

    
        log4jRefreshInterval
        60000
    

    
    
        DruidWebStatFilter
        com.alibaba.druid.support.http.WebStatFilter
        
            exclusions
            /static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
        
        
        
        
            sessionStatMaxCount
            1000
        
        
        
            profileEnable
            true
        
        
        
        
        
    
    
        DruidWebStatFilter
        /*
    

    
    
        com.alibaba.dubbo.remoting.http.servlet.BootstrapListener
    

    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        org.springframework.web.util.Log4jConfigListener
    

    
        dispatcher
        com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet
        1
    
    
        dispatcher
        /*
    

    
    
        DruidStatView
        com.alibaba.druid.support.http.StatViewServlet
        
            
            resetEnable
            true
        
        
            
            loginUsername
            druid
        
        
            
            loginPassword
            druid
        
    
    
        DruidStatView
        /druid/*
    

上面加了注解的配置,是本文配置的重點(diǎn),其它配置不在這里講解。


    DruidWebStatFilter
    com.alibaba.druid.support.http.WebStatFilter
    
        exclusions
        /static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
    


    DruidWebStatFilter
    /*

druid對(duì)除了靜態(tài)資源外底所有路由進(jìn)行監(jiān)控,該監(jiān)控采集web-jdbc關(guān)聯(lián)監(jiān)控的數(shù)據(jù)。而前面對(duì)數(shù)據(jù)源監(jiān)控的配置,大部分是sql監(jiān)控。

    
    resetEnable
    true


    
    loginUsername
    druid


    
    loginPassword
    druid

如果你不希望別人直接查看你的監(jiān)控,請(qǐng)把查看權(quán)限配置加上。如果監(jiān)控平臺(tái)被一些不安分的家伙知道,網(wǎng)站面臨攻擊的可能性就很大,安全性不靠保障,所以建議配置賬戶信息。

過濾器中的配置,是用來定義我們的監(jiān)控選項(xiàng),在以上的監(jiān)控配置中,上面這段xml代碼配置了一個(gè)最簡(jiǎn)單的監(jiān)控,并采用了大量的默認(rèn)配置,如果你想使用更豐富的監(jiān)控配置,可以在druid的github wiki上獲取更多的選項(xiàng),地址:druid Filter 配置


    DruidStatView
    com.alibaba.druid.support.http.StatViewServlet


    DruidStatView
    /druid/*

這個(gè)是德魯伊監(jiān)控平臺(tái)提供的servlet web服務(wù),啟動(dòng)服務(wù)器后,只需要在瀏覽器中輸入:http://127.0.0.1:8080/druid/即可訪問引言里面的幾個(gè)圖。

注意,路由根據(jù)自己的情況寫,如果你直接在idea中配置的,且idea中沒有配置context path的話,可以不用項(xiàng)目名。如果配置了,就用配置的名字,比如配置為test,則應(yīng)該訪問http://127.0.0.1:8080/test/druid/

在eclipse中,需要跟項(xiàng)目名的。假如項(xiàng)目時(shí)test0,則應(yīng)該是http://127.0.0.1:8080/test0/druid/。當(dāng)然了,如果不是這樣的話,聰明的你肯定會(huì)嘗試幾次其它形式的路由訪問了。

當(dāng)然還的注意端口號(hào),我這里面默認(rèn)用了8080,如果你是8090,就換吧。

重軸戲:log4j.xml配置



    
    
        
            
        
    
    
        
        
        
            
        
    

    



    
    
    
        
    
    
        
    
    
        
    
    
        
    
    
        
    
    
    
    
    
    
    
        
        
        
        
    

上面的配置看上去很雜,但是有用的配置用了包裹起來了,其它的配置都是看網(wǎng)上的配置,有些對(duì)配置根本沒有,有些事spring數(shù)據(jù)源監(jiān)控sql的配置,對(duì)于德魯伊,就包裹部分的足夠了,說這句話,并不是讓你放棄一些基本配置,基本配置永遠(yuǎn)不能缺少。

druid連接池配置屬性列表詳解
配置 缺省值 說明
name 配置這個(gè)屬性的意義在于,如果存在多個(gè)數(shù)據(jù)源,監(jiān)控的時(shí)候可以通過名字來區(qū)分開來。如果沒有配置,將會(huì)生成一個(gè)名字,格式是:”DataSource-” + System.identityHashCode(this)
jdbcUrl 連接數(shù)據(jù)庫的url,不同數(shù)據(jù)庫不一樣。例如:mysql : jdbc:mysql://10.20.153.104:3306/druid2;oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username 連接數(shù)據(jù)庫的用戶名
password 連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。詳細(xì)看這里:https://github.com/alibaba/dr...
driverClassName 根據(jù)url自動(dòng)識(shí)別 這一項(xiàng)可配可不配,如果不配置druid會(huì)根據(jù)url自動(dòng)識(shí)別dbType,然后選擇相應(yīng)的driverClassName
initialSize 0 初始化時(shí)建立物理連接的個(gè)數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時(shí)
maxActive 8 最大連接池?cái)?shù)量
maxIdle 8 已經(jīng)不再使用,配置了也沒效果
minIdle 最小連接池?cái)?shù)量
maxWait 獲取連接時(shí)最大等待時(shí)間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會(huì)有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
poolPreparedStatements false 是否緩存preparedStatement,也就是PSCache。PSCache對(duì)支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql5.5以下的版本中沒有PSCache功能,建議關(guān)閉掉。5.5及以上版本有PSCache,建議開啟。
maxOpenPreparedStatements -1 要啟用PSCache,必須配置大于0,當(dāng)大于0時(shí),poolPreparedStatements自動(dòng)觸發(fā)修改為true。在Druid中,不會(huì)存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個(gè)數(shù)值配置大一些,比如說100
validationQuery 用來檢測(cè)連接是否有效的sql,要求是一個(gè)查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會(huì)其作用。
testOnBorrow true 申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。
testOnReturn false 歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能
testWhileIdle false 建議配置為true,不影響性能,并且保證安全性。申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效。timeBetweenEvictionRunsMillis有兩個(gè)含義:1) Destroy線程會(huì)檢測(cè)連接的間隔時(shí)間 2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說明
numTestsPerEvictionRun 不再使用,一個(gè)DruidDataSource只支持一個(gè)EvictionRun
minEvictableIdleTimeMillis
connectionInitSqls 物理連接初始化的時(shí)候執(zhí)行的sql
exceptionSorter 根據(jù)dbType自動(dòng)識(shí)別 當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時(shí),拋棄連接
filters 屬性類型是字符串,通過別名的方式配置擴(kuò)展插件,常用的插件有:監(jiān)控統(tǒng)計(jì)用的filter:stat; 日志用的filter:log4j;防御sql注入的filter:wall;合并sql的filter:mergeStat
proxyFilters 類型是List,如果同時(shí)配置了filters和proxyFilters,是組合關(guān)系,并非替換關(guān)系
補(bǔ)充說明

前面說過,mybatis配置的時(shí)候,可以配置sqlSessionFactory的時(shí)候通過configLocation屬性可以指定mybatis的一些額外配置。

這里分享一段數(shù)據(jù)庫字段值為null時(shí),不返回字段名,而我們希望的是不管值為什么,字段名都應(yīng)該返回。配置如下:




    
        
        
    

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66023.html

相關(guān)文章

  • 如何有效地記錄 Java SQL 日志?

    摘要:本文主要介紹如何使用這個(gè)可以直接顯示完整的日志框架,希望對(duì)大家能有所幫助。當(dāng)設(shè)置為或時(shí),意味關(guān)閉記錄。 在常規(guī)項(xiàng)目的開發(fā)中可能最容易出問題的地方就在于對(duì)數(shù)據(jù)庫的處理了,在大部分的環(huán)境下,我們對(duì)數(shù)據(jù)庫的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。由于各種原因,我們有時(shí)會(huì)想知道在這些框架下實(shí)際執(zhí)行的 SQL 究竟是什么。 雖然 Hibernate 可以在配置...

    godiscoder 評(píng)論0 收藏0
  • 如何有效地記錄 Java SQL 日志?

    摘要:本文主要介紹如何使用這個(gè)可以直接顯示完整的日志框架,希望對(duì)大家能有所幫助。當(dāng)設(shè)置為或時(shí),意味關(guān)閉記錄。 在常規(guī)項(xiàng)目的開發(fā)中可能最容易出問題的地方就在于對(duì)數(shù)據(jù)庫的處理了,在大部分的環(huán)境下,我們對(duì)數(shù)據(jù)庫的操作都是使用流行的框架,比如 Hibernate 、 MyBatis 等。由于各種原因,我們有時(shí)會(huì)想知道在這些框架下實(shí)際執(zhí)行的 SQL 究竟是什么。 雖然 Hibernate 可以在配置...

    FleyX 評(píng)論0 收藏0
  • 通過項(xiàng)目逐步深入了解Mybatis<一>

    摘要:解決方法使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。向中設(shè)置參數(shù),對(duì)占位符號(hào)位置和設(shè)置參數(shù)值,硬編碼在代碼中,同樣也不利于系統(tǒng)的維護(hù)。從中遍歷結(jié)果集數(shù)據(jù)時(shí),存在硬編碼,將獲取表的字段進(jìn)行硬編碼,不利于系統(tǒng)維護(hù)。 Mybatis Mybatis 和 SpringMVC 通過訂單商品案例驅(qū)動(dòng) 官方中文地址:http://www.mybatis.org/mybati... 官方托管地址:https://...

    2bdenny 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<