@RequestController之?dāng)?shù)據(jù)源與連接池使用及說明
一、@RequestController————類
- 繼承自@Controller
- 向頁面發(fā)送JSON格式信息
- 相當(dāng)于@Controller+@ResponseBody————在頁面顯示數(shù)據(jù)

@Controller————類
- 跳轉(zhuǎn)到頁面

@ResponseBody————類/方法
- 返回json數(shù)據(jù)
- 用于異步獲取數(shù)據(jù)——在頁面顯示數(shù)據(jù)

@RequestMapping————方法(必需?。。?/h3>
- 訪問路徑:/h1
二、數(shù)據(jù)源與連接池
JNDI
- 概念:Java Naming and Directory Interface————JAVA命名和目錄接口
- 作用:為JAVA應(yīng)用程序提供命名和目錄訪問服務(wù)的API接口。
- 詳解:將Java對象以某個(gè)名稱的形式binding綁定到一個(gè)容器環(huán)境Context中,以后調(diào)用容器環(huán)境的lookup查找方法可以查找出某個(gè)名稱所綁定的Java對象。
- 在真實(shí)的項(xiàng)目應(yīng)用中,通常是由系統(tǒng)程序或框架程序先將資源對象綁定到JNDI環(huán)境中,以后在該系統(tǒng)或框架中運(yùn)行的模塊程序就可以從JNDI環(huán)境中查找這些資源對象了。
- 優(yōu)點(diǎn):這種方式極大的增強(qiáng)了系統(tǒng)的可維護(hù)性
- 容器環(huán)境Context也是一個(gè)Java對象,它也可以通過一個(gè)名稱綁定到另一個(gè)容器環(huán)境Context中。這就形成了一種父子級聯(lián)關(guān)系,多個(gè)Context對象最終可以級聯(lián)成一種樹狀結(jié)構(gòu),樹中的每個(gè)Context對象中都可以綁定若干個(gè)Java對象。
Tomcat服務(wù)器在啟動(dòng)時(shí)可以創(chuàng)建一個(gè)連接到某種數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)源DataSource對象,并將該數(shù)據(jù)源對象綁定到JNDI環(huán)境中,以后在這個(gè)Tomcat服務(wù)器中運(yùn)行的Servlet和JSP程序就可以從JNDI環(huán)境中查詢出這個(gè)數(shù)據(jù)源對象進(jìn)行使用。
數(shù)據(jù)源DataSource
- 概念:連接數(shù)據(jù)庫,創(chuàng)建Connection連接對象。
- 是數(shù)據(jù)庫對編程提供的一個(gè)接口,每個(gè)數(shù)據(jù)源對應(yīng)一個(gè)數(shù)據(jù)庫。
- 內(nèi)容:存儲(chǔ)了所有建立數(shù)據(jù)庫連接需要的信息。eg:username,pwd等
類似于通過指定文件名稱可以在文件系統(tǒng)中找到文件一樣,通過提供正確的數(shù)據(jù)源名稱,能找到相應(yīng)的數(shù)據(jù)庫連接。算是對數(shù)據(jù)庫的一個(gè)抽象映射。
連接池
- 概念:存放數(shù)據(jù)庫連接對象的一個(gè)緩沖池,需要數(shù)據(jù)連接時(shí)從緩沖池中取。
- 作用:管理數(shù)據(jù)源
- 操作過程:當(dāng)一個(gè)線程需要用JDBC對一個(gè)數(shù)據(jù)庫操作時(shí),將從池中請求一個(gè)連接。當(dāng)這個(gè)連接使用完畢后,將返回到連接池中,等待為其他的線程服務(wù)。
連接池分類
- DataSource用來取代DriverManager來獲取Connection,獲取速度快,同時(shí)可以大幅度提高數(shù)據(jù)庫訪問速度。
1. DBCP
- Tomcat內(nèi)置的連接池(Tomcat Dbcp)
- apache上的一個(gè) java連接池項(xiàng)目,也是 tomcat使用的連接池組件。單獨(dú)使用dbcp需要3個(gè)包:common-dbcp.jar,common-pool.jar,common-collections.jar
- 特點(diǎn):DBCP沒有自動(dòng)的去回收空閑連接的功能。
DBCP配置文件——dbcp.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true&useServerPrepStmts=false username=root password=abc123
2. C3P0
- C3P0是一個(gè)開源的jdbc連接池,它實(shí)現(xiàn)了數(shù)據(jù)源和JNDI綁定。
- C3P0是異步操作的,緩慢的jdbc操作通過幫助進(jìn)程完成。擴(kuò)展這些操作可以有效的提升性能。目前使用它的開源項(xiàng)目有Hibernate,Spring等。
- 特點(diǎn):C3P0有自動(dòng)回收空閑連接功能。
獲取方式
//使用C3P0數(shù)據(jù)庫連接池的配置文件方式,獲取數(shù)據(jù)庫的連接:推薦
private static DataSource cpds = new ComboPooledDataSource("helloc3p0");
public static Connection getConnection2() throws SQLException{
Connection conn = cpds.getConnection();
return conn;
}
c3p0配置文件——c3p0.properties
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-config name="helloc3p0"> <!-- 獲取連接的4個(gè)基本信息 --> <property name="user">root</property> <property name="password">abc123</property> <property name="jdbcUrl">jdbc:mysql:///test</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 涉及到數(shù)據(jù)庫連接池的管理的相關(guān)屬性的設(shè)置 --> <!-- 若數(shù)據(jù)庫中連接數(shù)不足時(shí), 一次向數(shù)據(jù)庫服務(wù)器申請多少個(gè)連接 --> <property name="acquireIncrement">5</property> <!-- 初始化數(shù)據(jù)庫連接池時(shí)連接的數(shù)量 --> <property name="initialPoolSize">5</property> <!-- 數(shù)據(jù)庫連接池中的最小的數(shù)據(jù)庫連接數(shù) --> <property name="minPoolSize">5</property> <!-- 數(shù)據(jù)庫連接池中的最大的數(shù)據(jù)庫連接數(shù) --> <property name="maxPoolSize">10</property> <!-- C3P0 數(shù)據(jù)庫連接池可以維護(hù)的 Statement 的個(gè)數(shù) --> <property name="maxStatements">20</property> <!-- 每個(gè)連接同時(shí)可以使用的 Statement 對象的個(gè)數(shù) --> <property name="maxStatementsPerConnection">5</property> </named-config> </c3p0-config>
3.Druid
- Druid是一個(gè)開源項(xiàng)目,源碼托管在github上。
- 阿里巴巴開源平臺(tái)上一個(gè)數(shù)據(jù)庫連接池實(shí)現(xiàn),它結(jié)合了C3P0、DBCP、PROXOOL等DB池的優(yōu)點(diǎn),同時(shí)加入了日志監(jiān)控,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,可以說是針對監(jiān)控而生的DB連接池,只要在web.xml中或spring的配置文件中加以配置即可。
- 據(jù)說是目前最好的連接池
Druid配置文件——druid.properties
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true username=root password=123456 driverClassName=com.mysql.jdbc.Driver initialSize=10 maxActive=20 maxWait=1000 filters=wall
總結(jié)
- 數(shù)據(jù)源連接數(shù)據(jù)庫,創(chuàng)建連接對象。
- 連接池是用來管理池中的連接對象。
連接池就像數(shù)據(jù)源的代理人,我們需要連接直接找連接池要,不用的連接也是直接還給連接池。
- 數(shù)據(jù)源:水管
- 連接池:水站
- 數(shù)據(jù)庫:水站源頭
- JNDI:水站門牌
獲取數(shù)據(jù)時(shí),通過找到JNDI,找到連接池,再找到連接對象和對應(yīng)的數(shù)據(jù)庫。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot2使用WebFlux函數(shù)式編程的方法
這篇文章主要介紹了SpringBoot2使用WebFlux函數(shù)式編程的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
使用java + OpenCV破解頂象面積驗(yàn)證碼的示例
這篇文章主要介紹了使用java + OpenCV破解頂象面積驗(yàn)證碼的示例,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
java打印從1到100的值(break,return斷句)
java 先寫一個(gè)程序,打印從1到100的值。之后修改程序,通過使用break關(guān)鍵詞,使得程序在打印到98時(shí)退出。然后嘗試使用return來達(dá)到相同的目的2017-02-02
spring-boot中spring-boot-maven-plugin報(bào)紅錯(cuò)誤及解決
這篇文章主要介紹了spring-boot中spring-boot-maven-plugin報(bào)紅錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot@Aspect 打印訪問請求和返回?cái)?shù)據(jù)方式
這篇文章主要介紹了SpringBoot@Aspect 打印訪問請求和返回?cái)?shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

