c3p0,dbcp與druid 三大連接池的區別(轉)

  下面就講講用的比較多的數據庫連接池。 

  1)DBCP

  DBCP是一個依賴Jakarta commons-pool對象池機制的數據庫連接池.DBCP可以直接的在應用程序中使用,Tomcat的數據源使用的就是DBCP。

  2)c3p0

  c3p0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發佈,包括了實現jdbc3和jdbc2擴展規範說明的Connection 和Statement 池的DataSources 對象。

  3)Druid

  阿里出品,淘寶和支付寶專用數據庫連接池,但它不僅僅是一個數據庫連接池,它還包含一個ProxyDriver,一系列內置的JDBC組件庫,一個 SQL Parser。支持所有JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。Druid針對Oracle和MySql做了特別優化,比如Oracle的PS Cache內存佔用優化,MySql的ping檢測優化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,這是一個手寫的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象語法樹很方便。簡單SQL語句用時10微秒以內,複雜SQL用時30微秒。通過Druid提供的SQL Parser可以在JDBC層攔截SQL做相應處理,比如說分庫分表、審計等。Druid防禦SQL注入攻擊的WallFilter就是通過Druid的SQL Parser分析語義實現的。

  看上面應該瞭解到功能上druid很厲害。

  再說說他們的屬性吧,連接池配置大體可以分爲基本配置、關鍵配置、性能配置等主要配置。

  基本配置是指連接池進行數據庫連接的四個基本必需配置:

  傳遞給JDBC驅動的用於連接數據庫的用戶名、密碼、URL以及驅動類名。

 

DBCP

c3p0

Druid

用戶名

username

user

username

密碼

password

password

password

URL

url

jdbcUrl

jdbcUrl

驅動類名

driverClassName

driverClass

driverClassName

注:在Druid連接池的配置中,driverClassName可配可不配,如果不配置會根據url自動識別dbType(數據庫類型),然後選擇相應的driverClassName。

  關鍵配置:爲了發揮數據庫連接池的作用,在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數 據庫連接是否被使用,連接池都將一直保證至少擁有這麼多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池 請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。

  最小連接數:

  是數據庫一直保持的數據庫連接數,所以如果應用程序對數據庫連接的使用量不大,將有大量的數據庫資源被浪費。

  初始化連接數:

  連接池啓動時創建的初始化數據庫連接數量。

  最大連接數

  是連接池能申請的最大連接數,如果數據庫連接請求超過此數,後面的數據庫連接請求被加入到等待隊列中。

  最大等待時間:

  當沒有可用連接時,連接池等待連接被歸還的最大時間,超過時間則拋出異常,可設置參數爲0或者負數使得無限等待(根據不同連接池配置)。

 

DBCP

c3p0

Druid

最小連接數

minIdle(0)

minPoolSize(3)

minIdle(0)

初始化連接數

initialSize(0)

initialPoolSize(3)

initialSize(0)

最大連接數

maxTotal(8)

maxPoolSize(15)

maxActive(8)

最大等待時間

maxWaitMillis(毫秒)

maxIdleTime(0秒)

maxWait(毫秒)

注1:在DBCP連接池的配置中,還有一個maxIdle的屬性,表示最大空閒連接數,超過的空閒連接將被釋放,默認值爲8。對應的該屬性在Druid連接池已不再使用,配置了也沒有效果,c3p0連接池則沒有對應的屬性。

注2:數據庫連接池在初始化的時候會創建initialSize個連接,當有數據庫操作時,會從池中取出一個連接。如果當前池中正在使用的連接數等 於maxActive,則會等待一段時間,等待其他操作釋放掉某一個連接,如果這個等待時間超過了maxWait,則會報錯;如果當前正在使用的連接數沒 有達到maxActive,則判斷當前是否空閒連接,如果有則直接使用空閒連接,如果沒有則新建立一個連接。在連接使用完畢後,不是將其物理連接關閉,而 是將其放入池中等待其他操作複用。

  性能配置:

    預緩存設置:

  即是PSCache,PSCache對支持遊標的數據庫性能提升巨大,比如說oracle。JDBC的標準參數,用以控制數據源內加載的 PreparedStatements數量。但由於預緩存的statements屬於單個connection而不是整個連接池,所以設置這個參數需要考 慮到多方面的因素。

  單個連接擁有的最大緩存數:要啓用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改爲true。在Druid中,不會存在Oracle下PSCache佔用內存過多的問題,可以把這個數值配置大一些,比如說100

 

DBCP

c3p0

Druid

開啓緩存功能

poolPreparedStatements

maxStatements

poolPreparedStatements

單個連接擁有的最大緩存數

maxOpenPrepared-

Statements

maxStatementsPer-

Connection

maxOpenPrepared-

Statements

  連接有效性檢測設置:

  連接池內部有機制判斷,如果當前的總的連接數少於miniIdle,則會建立新的空閒連接,以保證連接數得到miniIdle。如果當前連接池中某 個連接在空閒了timeBetweenEvictionRunsMillis時間後任然沒有使用,則被物理性的關閉掉。有些數據庫連接的時候有超時限制 (mysql連接在8小時後斷開),或者由於網絡中斷等原因,連接池的連接會出現失效的情況,這時候設置一個testWhileIdle參數爲true, 可以保證連接池內部定時檢測連接的可用性,不可用的連接會被拋棄或者重建,最大情況的保證從連接池中得到的Connection對象是可用的。當然,爲了 保證絕對的可用性,你也可以使用testOnBorrow爲true(即在獲取Connection對象時檢測其可用性),不過這樣會影響性能。

 

DBCP

c3p0

Druid

申請連接檢測

testOnBorrow

testConnectionOnCheckin

testOnBorrow

是否超時檢測

testWhileIdle

 

testWhileIdle

空閒時間

timeBetweenEvictionRunsMillis

idleConnectionTestPeriod

timeBetweenEvictionRunsMillis

校驗用sql語句

validationQuery

preferredTestQuery

validationQuery

歸還連接檢測

testOnReturn

testConnectionOnCheckout

testOnReturn

  超時連接關閉設置:

  removeAbandoned參數,用來檢測到當前使用的連接是否發生了連接泄露,所以在代碼內部就假定如果一個連接建立連接的時間很長,則將其認定爲泄露,繼而強制將其關閉掉。

 

DBCP

c3p0

Druid

是否超時關閉連接

removeAbandoned

breakAfterAcquireFailure

removeAbandoned

超時時間

removeAbandonedTimeout

checkoutTimeout

removeAbandonedTimeout

是否記錄日誌

logAbandoned

 

logAbandoned

  c3p0重連設置:

  設置獲取連接失敗後,是否重新連接以及間隔時間。

 

DBCP

c3p0

Druid

重連次數

 

acquireRetryAttempts

 

間隔時間

 

acquireRetryDelay

 

   各個連接池的屬性說明

  DBCP 屬性說明表

屬性(Parameter)

默認值(Default)

描述(Description)

username

 

傳遞給JDBC驅動的用於建立連接的用戶名(The connection username to be passed to our JDBC driver to establish a connection.)

password  

 

傳遞給JDBC驅動的用於建立連接的密碼(The connection password to be passed to our JDBC driver to establish a connection.)

url

 

傳遞給JDBC驅動的用於建立連接的URL(The connection URL to be passed to our JDBC driver to establish a connection.)

driverClassName

 

使用的JDBC驅動的完整有效的java 類名(The fully qualified Java class name of the JDBC driver to be used.)

defaultAutoCommit

driver default

連接池創建的連接的默認的auto-commit狀態,沒有設置則不會自動提交(The default auto-commit state of connections created by this pool. If not set then the setAutoCommit method will not be called.)

initialSize

0

初始化連接:連接池啓動時創建的初始化連接數量(The initial number of connections that are created when the pool is started.

maxTotal

8

最大活動連接:連接池在同一時間能夠分配的最大活動連接的數量如果設置爲非正數則表示不限制(The maximum number of active connections that can be allocated from this pool at the same time, or negative for no limit.)

maxIdle

8

最大空閒連接:連接池中容許保持空閒狀態的最大連接數量,超過的空閒連接將被釋放,如果設置爲負數表示不限制(The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.)

minIdle

0

最小空閒連接:連接池中容許保持空閒狀態的最小連接數量,負數表示沒有現在(The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.)

注意:如果在某些負載比較大的系統中將maxIdel設置過小時,很可能會出現連接關閉的同時新連接馬上打開的情況.這是由於關閉連接的線程比打開的快導致的.所以,對於這種系統中,maxIdle的設定值是不同的但是通常首選默認值

(NOTE: If maxIdle is set too low on heavily loaded systems it is possible you will see connections being closed and almost immediately new connections being opened. This is a result of the active threads momentarily closing connections faster than they are opening them, causing the number of idle connections to rise above maxIdle. The best value for maxIdle for heavily loaded system will vary but the default is a good starting point.)

maxWaitMillis

indefinitely

最大等待時間:當沒有可用連接時,連接池等待連接被歸還的最大時間(以毫秒計數),超過時間則拋出異常,如果設置爲-1表示無限等待(The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely.)

validationQuery  

 

SQL查詢,用來驗證從連接池取出的連接,在將連接返回給調用者之前.如果指定,則查詢必須是一個SQL SELECT並且必須返回至少一行記錄(The SQL query that will be used to validate connections from this pool before returning them to the caller. If specified, this query MUST be an SQL SELECT statement that returns at least one row. If not specified, connections will be validation by calling the isValid() method.)

testOnCreate

false

指明是否在建立連接之後進行驗證,如果驗證失敗,則嘗試重新建立連接(The indication of whether objects will be validated after creation. If the object fails to validate, the borrow attempt that triggered the object creation will fail.)

testOnBorrow

true

指明是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接並嘗試取出另一個.注意設置爲true後如果要生效,validationQuery參數必須設置爲非空字符串(The indication of whether objects will be validated before being borrowed from the pool. If the object fails to validate, it will be dropped from the pool, and we will attempt to borrow another.)

testOnReturn

false

指明是否在歸還到池中前進行檢驗(The indication of whether objects will be validated before being returned to the pool.)

testWhileIdle

false

指明連接是否被空閒連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除. 注意設置爲true後如果要生效,validationQuery參數必須設置爲非空字符串(The indication of whether objects will be validated by the idle object evictor (if any). If an object fails to validate, it will be dropped from the pool.)

timeBetweenEviction-

RunsMillis

-1

在空閒連接回收器線程運行期間休眠的時間值,以毫秒爲單位.如果設置爲非正數,則不運行空閒連接回收器線程(The number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run.)

numTestsPerEvictionRun

3

在每次空閒連接回收器線程(如果有)運行時檢查的連接數量(The number of objects to examine during each run of the idle object evictor thread (if any).)

minEvictableIdleTime-Millis  

1000*60*30

連接在池中保持空閒而不被空閒連接回收器線程(如果有)回收的最小時間值,單位毫秒(The minimum amount of time an object may sit idle in the pool before it is eligable for eviction by the idle object evictor (if any).)

softMiniEvictableIdle- TimeMillis

-1

說明(The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least "minIdle" connections remain in the pool. When miniEvictableIdleTimeMillis is set to a positive value, miniEvictableIdleTimeMillis is examined first by the idle connection evictor - i.e. when idle connections are visited by the evictor, idle time is first compared against miniEvictableIdleTimeMillis (without considering the number of idle connections in the pool) and then against softMinEvictableIdleTimeMillis, including the minIdle constraint.)

maxConnLifetimeMillis

-1

說明(The maximum lifetime in milliseconds of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.)

logExpiredConnections

true

說明(Flag to log a message indicating that a connection is being closed by the pool due to maxConnLifetimeMillis exceeded. Set this property to false to suppress expired connection logging that is turned on by default.

connectionInitSqls

null

說明(A Collection of SQL statements that will be used to initialize physical connections when they are first created. These statements are executed only once - when the configured connection factory creates the connection.)

info

true

說明(True means that borrowObject returns the most recently used ("last in") connection in the pool (if there are idle connections available). False means that the pool behaves as a FIFO queue - connections are taken from the idle instance pool in the order that they are returned to the pool.)

poolPreparedState-ments

false

開啓池的prepared statement 池功能(Enable prepared statement pooling for this pool.)

maxOpenPreparedState-ments  

unlimited

statement池能夠同時分配的打開的statements的最大數量如果設置爲0表示不限制(The maximum number of open statements that can be allocated from the statement pool at the same time, or negative for no limit.)

NOTE - Make sure your connection has some resources left for the other statements. Pooling PreparedStatements may keep their cursors open in the database, causing a connection to run out of cursors, especially if maxOpenPreparedStatements is left at the default (unlimited) and an application opens a large number of different PreparedStatements per connection. To avoid this problem, maxOpenPreparedStatements should be set to a value less than the maximum number of cursors that can be open on a Connection.

accessToUnderlyingConnectionAllowed

false

控制PoolGuard是否容許獲取底層連接(Controls if the PoolGuard allows access to the underlying connection.) 默認false不開啓這是一個有潛在危險的功能不適當的編碼會造成傷害.(關閉底層連接或者在守護連接已經關閉的情況下繼續使用它).請謹慎使用,並且僅當需要直接訪問驅動的特定功能時使用.注意不要關閉底層連接只能關閉前面的那個Default is false, it is a potential dangerous operation and misbehaving programs can do harmful things. (closing the underlying or continue using it when the guarded connection is already closed) Be careful and only use when you need direct access to driver specific extensions. NOTE: Do not close the underlying connection, only the original one.

removeAbandoned

false

標記是否刪除泄露的連接,如果他們超過了removeAbandonedTimout的限制.如果設置爲true, 連接被認爲是被泄露並且可以被刪除,如果空閒時間超過removeAbandonedTimeout. 設置爲true可以爲寫法糟糕的沒有關閉連接的程序修復數據庫連接. (Flags to remove abandoned connections if they exceed the removeAbandonedTimout. A connection is considered abandoned and eligible for removal if it has not been used for longer than removeAbandonedTimeout. Setting one or both of these to true can recover db connections from poorly written applications which fail to close connections.)

removeAbandonedTimeout

300

泄露的連接可以被刪除的超時值單位秒 (Timeout in seconds before an abandoned connection can be removed.)

logAbandoned

false

標記當Statement或連接被泄露時是否打印程序的stack traces日誌。被泄露的Statements和連接的日誌添加在每個連接打開或者生成新的Statement,因爲需要生成stack trace(Flag to log stack traces for application code which abandoned a Statement or Connection. Logging of abandoned Statements and Connections adds overhead for every Connection open or new Statement because a stack trace has to be generated.)

abandonedUsageTracking

false

如果爲true, 那麼連接池會記錄每個方法調用時候的堆棧信息以及廢棄連接的調試信息(If true, the connection pool records a stack trace every time a method is called on a pooled connection and retains the most recent stack trace to aid debugging of abandoned connections. There is significant overhead added by setting this to true.)

:如果開啓"removeAbandoned",那麼連接在被認爲泄露時可能被池回收這個機制在(getNumIdle() < 2)and (getNumActive() > getMaxActive() - 3)時被觸發舉例當maxActive=20, 活動連接爲18,空閒連接爲1時可以觸發"removeAbandoned".但是活動連接只有在沒有被使用的時間超過"removeAbandonedTimeout"時才被刪除,默認300.resultset中游歷不被計算爲被使用.

If you have enabled removeAbandonedOnMaintenance or removeAbandonedOnBorrow then it is possible that a connection is reclaimed by the pool because it is considered to be abandoned. This mechanism is triggered when (getNumIdle() < 2) and (getNumActive() > getMaxTotal() - 3) and removeAbandonedOnBorrow is true; or after eviction finishes and removeAbandonedOnMaintenance is true. For example, maxTotal=20 and 18 active connections and 1 idle connection would trigger removeAbandonedOnBorrow, but only the active connections that aren't used for more then "removeAbandonedTimeout" seconds are removed (default 300 sec). Traversing a resultset doesn't count as being used. Creating a Statement, PreparedStatement or CallableStatement or using one of these to execute a query (using one of the execute methods) resets the lastUsed property of the parent connection.

   C3P0  屬性說明表

屬性(Parameter)

默認值(Default)

描述(Description)

user

 

DBCP中的username屬性

password  

 

DBCP中的password屬性

jdbcUrl

 

DBCP中的jdbcUrl屬性

driverClass

 

DBCP中的driverClass屬性

autoCommitOnClose

false

默認值false表示回滾任何未提交的任務,設置爲true則全部提交,而不是在關閉連接之前回滾

(C3P0's default policy is to rollback any uncommitted, pending work.Setting autoCommitOnClose to true causes uncommitted pending work to be committed, rather than rolled back on Connection close.)

*參見DBCP中的defaultAutoCommit屬性

initialPoolSize

3

初始化連接:連接池啓動時創建的初始化連接數量(The initial number of connections that are created when the pool is started.

*參見DBCP中的initialSize屬性

maxPoolSize

15

連接池中保留的最大連接數(Maximum number of Connections a pool will maintain at any given time.)      *參見DBCP中的maxIdle屬性

minPoolSize

3

連接池中保留的最小連接數(Minimum number of Connections a pool will maintain at any given time.)      *參見DBCP中的maxIdle屬性

maxIdleTime

0

最大等待時間:當沒有可用連接時,連接池等待連接被歸還的最大時間(以秒計數),超過時間則拋出異常,如果設置爲0表示無限等待(Seconds a Connection can remain pooled but unused before being discarded. Zero means idle connections never expire.)                            *參見DBCPmaxWaitMillis 屬性

preferredTestQuery

null

定義所有連接測試都執行的測試語句。在使用連接測試的情況下這個一顯著提高測試速度。注意:測試的表必須在初始數據源的時候就存在。(Defines the query that will be executed for all connection tests, if the default ConnectionTester (or some other implementation of QueryConnectionTester, or better yet FullQueryConnectionTester) is being used. Defining a preferredTestQuery that will execute quickly in your database may dramatically speed up Connection tests.)

testConnectionOn- Checkin

false

如果設爲true那麼在取得連接的同時將校驗連接的有效性。(If true, an operation will be performed asynchronously at every connection checkin to verify that the connection is valid. Use in combination with idleConnectionTestPeriod for quite reliable, always asynchronous Connection testing.)                                     *參見DBCP中的testOnBorrow屬性

testConnectionOn- Checkout

false

如果設爲true那麼在每個connection提交的時候都將校驗其有效性,但是要確保配置的preferredTestQuery的有效性(If true, an operation will be performed at every connection checkout to verify that the connection is valid. Be sure to set an efficient preferredTestQuery or automaticTestTable if you set this to true.)                                 *參見DBCP中的testOnBorrow屬性

idleConnectionTest- Period

0

如果設置大於0,表示過了多少秒檢查一次空閒連接,結合testConnectionOnCheckin以及testConnectionOnCheckout使用(If this is a number greater than 0, c3p0 will test all idle, pooled but unchecked-out connections, every this number of seconds.)

acquireRetryAttempts

30

定義在從數據庫獲取新連接失敗後重復嘗試的次數如果小於0則表示無限制的連接。(Defines how many times c3p0 will try to acquire a new Connection from the database before giving up. If this value is less than or equal to zero, c3p0 will keep trying to fetch a Connection indefinitely.)

acquireRetryDelay

1000

兩次連接中的間隔時間,單位毫秒。(Milliseconds, time c3p0 will wait between acquire attempts.)

breakAfterAcquire-

Failure

false

獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常。但是數據源仍有效保留,並在下次調用 getConnection() 的時候繼續嘗試獲取連接。如果爲 true,那麼在嘗試獲取連接失敗後該數據源將聲明已斷開並永久關閉。(If true, a pooled DataSource will declare itself broken and be permanently closed if a Connection cannot be obtained from the database after making acquireRetryAttempts to acquire one. If false, failure to obtain a Connection will cause all Threads waiting for the pool to acquire a Connection to throw an Exception, but the DataSource will remain valid, and will attempt to acquire again following a call to getConnection().)

checkoutTimeout

0

當連接池用完時客戶端調用 getConnection() 後等待獲取新連接的時間,潮溼後將拋出SQLException,如設爲0,則爲無限期等待。單位毫秒。(The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted. Zero means wait indefinitely. Setting any positive value will cause the getConnection() call to time-out and break with an SQLException after the specified number of milliseconds.)

maxStatements

0

控制數據源內加載的PreparedStatements數量(Enable prepared statement pooling for this pool.)

maxStatementsPer- Connection

0

定義了連接池內單個連接所擁有的最大緩存statements(The maximum number of open statements that can be allocated from the statement pool at the same time, or negative for no limit.)

   DRUID 屬性說明表

屬性(Parameter)

默認值(Default)

描述(Description)

username

 

連接數據庫的用戶名

password  

 

連接數據庫的密碼

jdbcUrl

 

DBCP中的jdbcUrl屬性

driverClassName

根據url自動識別

這一項可配可不配,如果不配置druid會根據url自動識別dbType,然後選擇相應的driverClassName

initialSize

0

初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection                   *參見DBCP中的initialSize屬性

maxActive

8

最大連接池數量(Maximum number of Connections a pool will maintain at any given time.)                        *參見DBCP中的maxTotal屬性

maxIdle

8

已經不再使用,配置了也沒效果                        *參見DBCP中的maxIdle屬性

minIdle

 

最小連接池數量

maxWait

 

獲取連接時最大等待時間,單位毫秒。配置了maxWait之後,缺省啓用公平鎖,併發效率會有所下降,如果需要可以通過配置useUnfairLock屬性爲true使用非公平鎖。

poolPreparedState- ments

false

是否緩存preparedStatement,也就是PSCachePSCache對支持遊標的數據庫性能提升巨大,比如說oracle

maxOpenPrepared- Statements

-1

要啓用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改爲true      Druid中,不會存在OraclePSCache佔用內存過多的問題,可以把這個數值配置大一些,比如說100

testOnBorrow

true

申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。

testOnReturn

false

歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能

testWhileIdle

false

建議配置爲true,不影響性能,並且保證安全性。申請連接的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。

validationQuery

 

用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuerynulltestOnBorrowtestOnReturn testWhileIdle都不會其作用。在mysql中通常爲select 'x',在oracle中通常爲select 1 from dual

timeBetweenEviction-RunsMillis

 

1) Destroy線程會檢測連接的間隔時間                2) testWhileIdle的判斷依據

minEvictableIdle- TimeMillis

 

Destory線程中如果檢測到當前連接的最後活躍時間和當前時間的差值大於minEvictableIdleTimeMillis,則關閉當前連接。

removeAbandoned

 

對於建立時間超過removeAbandonedTimeout的連接強制關閉

removeAbandoned-Timeout

 

指定連接建立多長時間就需要被強制關閉

logAbandoned

false

指定發生removeabandoned的時候,是否記錄當前線程的堆棧信息到日誌中

filters

 

屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有: 1)監控統計用的filter:stat                  2)日誌用的filter:log4j   3)防禦sql注入的filter:wall

參考博客:http://www.cnblogs.com/JavaSubin/p/5294721.html(我這個應該算是抄完的。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章