㈠ mybatis+druid+jdbc 原理介紹
mybatis是警察.
druid是武器庫(有很多槍).
jdbc是武器商(他們造槍給武器庫).
當你需要一次"除暴安良"時,你需要去找警察,警察從武器庫拿槍幹活.
以往的開發,是你使用jdbc直接造槍,然後自己幹活.
jdbc整合了:載入資料庫驅動,創建連接,寫原生語句,執行,關閉這些東西.
而mybatis是對jdbc的封裝,他允許你通過配置的形式,配置資料庫參數,並且允許你通過xml來寫動態sql語句.<if:test>讓你可以把sql變得靈活起來.並且還能將你的查詢結果直接映射到你想要的實體上面.
然後你就去配置你的用戶名,密碼,連接超時,等等.
等你下次使用mybatis時,他後面會根據你的配置,幫你載入資料庫驅動,創建連接,寫原生語句,執行,關閉.
但是mybatis發現,在你每次訪問都要重新創建創建連接,寫,關.很麻煩,所以mybatis說,我可以接受你再配置一個連接池,比如druid.
mybatis讓你指定連接池是誰,如druid.之後將原來自己需要搞的東西都交給druid.什麼賬號了,密碼了.都給他,讓druid幫你創建一批連接,在你需要用的時候,mybatis從druid裡面拿一個就行.
下面是一次簡單的訪問流程:
controller->service->->mapper
1.首先項目啟動時druid就已經使用jdbc創建好一堆連接了,留待後用.
2.當請求到mapper時,mybatis框架創建臨時類.
3.然後將動態sql進行替換重寫,變成原始的native sql.
4.從druid拿到一個連接.
5.將sql通過連接交給資料庫執行.
6.然後獲取執行結果.
7.mybatis進行將結果進行映射,返回數據.
說的有點亂,希望能說清楚吧...
㈡ druid sql server 驗證
Druid是屬於阿里巴巴開源項目,負責人溫少錦,人稱溫少,從2010入職阿里,開發了DRAGOON性能夠監控系統,以及被稱為最快的JSON解析引擎FASTJSON。
Druid是阿里巴巴開源平台上的一個項目,整個項目由資料庫連接池、插件框架和SQL解析器組成。該項目主要是為了擴展JDBC的一些限制,可以讓程序員實現一些特殊的需求,比如向密鑰服務請求憑證、統計SQL信息、SQL性能收集、SQL注入檢查、SQL翻譯等,程序員可以通過定製來實現自己需要的功能。
㈢ 解決druid連接池執行sql為什麼拋出異常:java.sql.sqlexception:statement is clo
DRUID是阿里巴巴開源上一個資料庫連接池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連接和SQL的執行情況,可以說是針對監控而生的DB連接池(據說是目前最好的連接池,不知道速度有沒有BoneCP快)。
㈣ druiddatasource 最大連接數120能支撐多少台伺服器訪問
druid連接池配置
package demo.test;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DBUtil {
private static DataSource ds = null;
static {
try{
InputStream in = DBUtil.class.getClassLoader()
.getResourceAsStream("ds.properties");
Properties props = new Properties();
props.load(in);
ds = DruidDataSourceFactory.createDataSource(props);
}catch(Exception ex){
ex.printStackTrace();
}
}
public static Connection openConnection() throws SQLException{
return ds.getConnection();
}
}
ds.properties內容:
driverClassName = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username = ******
password = ******
initialSize = 5
maxActive = 10
minIdle = 3
maxWait = 60000
removeAbandoned = true
removeAbandonedTimeout = 180
timeBetweenEvictionRunsMillis = 60000
minEvictableIdleTimeMillis = 300000
validationQuery = SELECT 1 FROM DUAL
testWhileIdle = true
testOnBorrow = false
testOnReturn = false
poolPreparedStatements = true
= 50
filters = stat
基於Spring的配置:
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 資料庫基本信息配置 -->
<property name="driverClassName" value="${oracle.driver}" />
<property name="url" value="${oracle.url}" />
<property name="username" value="${oracle.username}" />
<property name="password" value="${oracle.password}" />
<!-- 初始化連接數量 -->
<property name="initialSize" value="${druid.initialSize}" />
<!-- 最大並發連接數 -->
<property name="maxActive" value="${druid.maxActive}" />
<!-- 最大空閑連接數 -->
<property name="maxIdle" value="${druid.maxIdle}" />
<!-- 最小空閑連接數 -->
<property name="minIdle" value="${druid.minIdle}" />
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait" value="${druid.maxWait}" />
<!-- 超過時間限制是否回收 -->
<property name="removeAbandoned" value="${druid.removeAbandoned}" />
<!-- 超過時間限制多長; -->
<property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
<!-- 用來檢測連接是否有效的sql,要求是一個查詢語句-->
<property name="validationQuery" value="${druid.validationQuery}" />
<!-- 申請連接的時候檢測 -->
<property name="testWhileIdle" value="${druid.testWhileIdle}" />
<!-- 申請連接時執行validationQuery檢測連接是否有效,配置為true會降低性能 -->
<property name="testOnBorrow" value="${druid.testOnBorrow}" />
<!-- 歸還連接時執行validationQuery檢測連接是否有效,配置為true會降低性能 -->
<property name="testOnReturn" value="${druid.testOnReturn}" />
<!-- 打開PSCache,並且指定每個連接上PSCache的大小 -->
<property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
<property name="" value="${druid.}" />
<!--屬性類型是字元串,通過別名的方式配置擴展插件,常用的插件有:
監控統計用的filter:stat
日誌用的filter:log4j
防禦SQL注入的filter:wall -->
<property name="filters" value="${druid.filters}" />
</bean>
啟用Web監控統計功能需要在Web應用的web.xml中加入以下內容:
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
訪問監控頁面:http://ip:port/projectName/druid/index.html
㈤ ssm框架中怎麼配置資料庫連接池
Druid配置
1.下載jar包:http://repo1.maven.org/maven2/com/alibaba/druid/
2.編寫資料庫連接的資源文件:dbconfig.properties
url:jdbc:mysql://localhost:3306/flm?useUnicode=true&characterEncoding=utf8
driverClassName:com.mysql.jdbc.Driver
username:root
password:root
#------------------------------------------------------------------------------------------
#配置擴展插件 監控統計用filters:stat 日誌用filters:log4j 防禦sql注入用filters:wall
filters:stat
#最大連接池數量 初始化建立物理連接的個數 獲取連接時最長的等待時間 最小連接池數量 maxIdle已經棄用
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
maxIdle:15
#有兩個含義 1.Destroy 線程會檢測連接的時間 2.testWhileIdle的判斷依據
timeBetweenEvictionRunsMillis:60000
#Destory線程中如果檢測到當前連接的最後活躍時間和當前時間的差值大於minEvictableIdleTimeMillis,則關閉當前連接
minEvictableIdleTimeMillis:300000
#用來檢測連接是否的sql,要求是一個查詢語句。在mysql中通常設置為SELECT 'X'
validationQuery:SELECT 'x'
#申請連接的時候檢測,如果空閑時間大於timeBetweenEvictionRunsMillis,執行validationQuery連接是否有效
testWhileIdle:true
#申請連接時執行validationQuery檢測連接是否有效 這個配置會降低性能
testOnBorrow:false
#歸還連接時執行validationQuery檢測連接是否有效 這個配置會降低性能
testOnReturn:false
#要啟用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改為true
maxOpenPreparedStatements:20
#對於建立連接超過removeAbandonedTimeout的連接強制關閉
removeAbandoned:true
#指定連接建立多長就被強制關閉
removeAbandonedTimeout:1800
#指定發生removeabandoned時,是否記錄當前線程的堆棧信息到日誌中
logAbandoned:true
04142434445460414243444546
3.在Spring配置文件ApplicationContext.xml中載入資源文件進來
<!--PropertyPlaceholderConfigurer是個bean工廠後置處理器的實現,也就是 BeanFactoryPostProcessor介面的一個實現。PropertyPlaceholderConfigurer可以將上下文(配置文 件)中的屬性值放在另一個單獨的標准java Properties文件中去。-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/dbconfig.properties</value> <!--dbconfig.properties 資料庫連接信息-->
</list>
</property>
</bean> 1234567812345678
4.在Spring配置文件ApplicationContext.xml中配置阿里數據連接池Druid
<!-- 阿里 druid資料庫連接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- 資料庫基本信息配置 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="driverClassName" value="${driverClassName}" />
<property name="filters" value="${filters}" />
<!-- 最大並發連接數 -->
<property name="maxActive" value="${maxActive}" />
<!-- 初始化連接數量 -->
<property name="initialSize" value="${initialSize}" />
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait" value="${maxWait}" />
<!-- 最小空閑連接數 -->
<property name="minIdle" value="${minIdle}" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testWhileIdle" value="${testWhileIdle}" />
<property name="testOnBorrow" value="${testOnBorrow}" />
<property name="testOnReturn" value="${testOnReturn}" />
<property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
<!-- 打開removeAbandoned功能 -->
<property name="removeAbandoned" value="${removeAbandoned}" />
<!-- 1800秒,也就是30分鍾 -->
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
<!-- 關閉abanded連接時輸出錯誤日誌 -->
<property name="logAbandoned" value="${logAbandoned}" />
</bean>
㈥ 如何使用Druid監控sql
首先是過濾器filter的配置,在web.xml中添加如下配置,如圖:
選項配置結束之後,就是我們監控界面的路徑配置了,配置如下圖
Druid已經配置好,接著在瀏覽器中訪問,如圖所以:
輸入訪問地址後,進入Druid監控頁面,如圖所示:
5
此時,在瀏覽器中輸入需要監控系統頁面網址,然後點擊上個畫面中的「SQL監控」即可,此時就可以看到每個SQL語句所用的時間,如下圖所示:
㈦ druid 怎麼配置防禦sql注入攻擊
使用PDO或者MySQLi,有很多封裝好的方便的Class。 例如使用PHP-PDO-MySQL-Class · GitHub(這個Class使用上比較類似Python的MySQLdb)的話,這樣就是安全的: 直接拼接字元串則是危險的:
㈧ Druid 的SQL翻譯功能如何使用
Druid是阿里巴巴開源平台上的一個項目,整個項目由資料庫連接池、插件框架和SQL解析器組成。該項目主要是為了擴展JDBC的一些限制,可以讓程序員實現一些特殊的需求,比如向密鑰服務請求憑證、統計SQL信息、SQL性能收集、SQL注入檢查、SQL翻譯等,程序員可以通過定製來實現自己需要的功能。