Druid是什麼?
Druid首先是一個數據庫鏈接池。Druid是目前最好的數據庫鏈接池,在功能、性能、擴展性方面,都超過其餘數據庫鏈接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 html
Druid已經在阿里巴巴部署了超過600個應用,通過一年多生產環境大規模部署的嚴苛考驗。 web
同時Druid不單單是一個數據庫鏈接池,它包括四個部分:
Druid是一個JDBC組件,它包括三個部分: spring
Druid能夠作什麼?
- 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫鏈接池。
- 能夠監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,可以詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。
- 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是很差的行爲,容易致使安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
- SQL執行日誌,Druid提供了不一樣的LogFilter,可以支持Common-Logging、Log4j和JdkLog,你能夠按須要選擇相應的LogFilter,監控你應用的數據庫訪問狀況。
- 擴展JDBC,若是你要對JDBC層有編程的需求,能夠經過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。
在項目中使用Druid很是簡單,只要修改下配置文件就能夠了 sql
下載 druid-0.2.20.jar http://download.csdn.net/detail/wind520/5670085 數據庫
applicationContext.xml 數據源配置 編程
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
-
- <description>Spring公共配置文件 </description>
-
- <!-- 定義受環境影響易變的變量 -->
- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
- <property name="ignoreResourceNotFound" value="true" />
- <property name="locations">
- <list>
- <!-- 標準配置 -->
- <value>classpath*:/application.properties</value>
- </list>
- </property>
- </bean>
-
- <!-- 數據源配置,使用應用內的c3p0數據庫鏈接池 -->
- <!--
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
- <property name="driverClass" value="${jdbc.driverClassName}"/>
- <property name="jdbcUrl" value="${jdbc.url}"/>
- <property name="user" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- <property name="initialPoolSize" value="5"/>
- <property name="minPoolSize" value="5"/>
- <property name="maxPoolSize" value="100"/>
- <property name="checkoutTimeout" value="5000"/>
- <property name="maxIdleTime" value="1800"/>
- <property name="idleConnectionTestPeriod" value="3000"/>
- <property name="acquireIncrement" value="3"/>
- </bean>
- -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- <property name="filters" value="stat" />
- <property name="maxActive" value="20" />
- <property name="initialSize" value="1" />
- <property name="maxWait" value="60000" />
- <property name="minIdle" value="1" />
- <property name="timeBetweenEvictionRunsMillis" value="3000" />
- <property name="minEvictableIdleTimeMillis" value="300000" />
- <property name="validationQuery" value="SELECT 'x'" />
- <property name="testWhileIdle" value="true" />
- <property name="testOnBorrow" value="false" />
- <property name="testOnReturn" value="false" />
- <property name="poolPreparedStatements" value="true" />
- <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
- </bean>
- <!-- Hibernate配置 -->
- <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
-
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">${jdbc.dialect}</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.format_sql">true</prop>
- <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
- <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>
- <prop key="hibernate.cache.use_query_cache">true</prop>
- <prop key="hibernate.cache.use_second_level_cache">true</prop>
- </props>
- </property>
- <property name="packagesToScan">
- <list>
- <value>com.kingmed.jusmartcare.health.entity</value>
- </list>
- </property>
-
- </bean>
-
- <!-- 事務管理器配置,單數據源事務 -->
- <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
-
- <!-- 使用annotation定義事務 -->
- <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
-
- </beans>
web.xml 加上 api
- <servlet>
- <servlet-name>DruidStatView</servlet-name>
- <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>DruidStatView</servlet-name>
- <url-pattern>/druid/*</url-pattern>
- </servlet-mapping>
就能夠了.
監控頁面 安全
========================================================================================================================= session
Druid是一個JDBC組件,它包括三部分: app
Druid能夠作什麼?
1) 能夠監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,可以詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。
2) 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫鏈接池。
3) 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是很差的行爲,容易致使安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL執行日誌,Druid提供了不一樣的LogFilter,可以支持Common-Logging、Log4j和JdkLog,你能夠按須要選擇相應的LogFilter,監控你應用的數據庫訪問狀況。
擴展JDBC,若是你要對JDBC層有編程的需求,能夠經過Druid提供的Filter-Chain機制,很方便編寫JDBC層的擴展插件。
以下是一個基於Druid內置擴展StatFilter的監控實現:
Druid 的 JavaDoc 文檔請看
http://tool.oschina.net/apidocs/apidoc?api=druid0.26