單例模式和JNBI連接數(shù)據(jù)庫

單例模式是設(shè)計(jì)模式中最簡(jiǎn)單的形式之一婿失。這一模式的目的是使得類的一個(gè)對(duì)象成為系統(tǒng)中的唯一實(shí)例钞艇。


* 餓漢模式

public class HungrySingle {

// 內(nèi)部自己創(chuàng)建好實(shí)例,私有屬性(不建議在外部直接調(diào)用我們的成員變量)

? ? private static final HungrySingle sInstance = new HungrySingle();

//私有的構(gòu)造方法

? ? private HungrySingle() {

? ? }

//創(chuàng)建一個(gè)方法豪硅,使外部可以得到此實(shí)例

? ? public static HungrySingle getInstance() {

? ? ? ? return sInstance;

? ? }

}

* 懶漢模式

public class LazySingle {

//創(chuàng)建私有實(shí)例

? ? private static LazySingle sInstance = null;

//定義私有的構(gòu)造 哩照,禁止外部直接創(chuàng)建示例

? ? private LazySingle() {

? ? }

//創(chuàng)建方法,使外部可以調(diào)用我們的私有對(duì)象實(shí)例

? ? public static LazySingle getInstance() {

? ? ? ? if (sInstance == null) {

//加上synchronized保證對(duì)象的訪問的線程安全

? ? ? ? ? ? synchronized (LazySingle.class) {

? ? ? ? ? ? ? ? ? ? sInstance = new LazySingle();

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return sInstance;

? ? }

}

//餓漢式:

? ? ? ? public class Singleton{

? ? ? ? ? ? private static Singleton singleton = new Singleton ();

? ? ? ? ? ? private Singleton (){}

? ? ? ? ? ? public static Singleton getInstance(){return singletion;}

? ? ? }

//懶漢式:

? ? ? public class Singleton{

? ? ? ? ? ? private static Singleton singleton = null;

? ? ? ? ? ? public static synchronized Singleton getInstance(){

? ? ? ? ? ? ? ? if(singleton==null){

? ? ? ? ? ? ? ? ? ? singleton = new Singleton();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return singleton;

? ? ? ? ? ? }

? ? ? }

數(shù)據(jù)源:

數(shù)據(jù)源(DataSource)用來連接數(shù)據(jù)庫懒浮,創(chuàng)建連接(Connection)對(duì)象飘弧。

java.sql.DataSource接口負(fù)責(zé)建立與數(shù)據(jù)庫的連接

由Tomcat提供,將連接保存在連接池中砚著。

連接池:

連接池是由容器(比如Tomcat)提供的次伶,用來管理池中的連接對(duì)象。

連接池自動(dòng)分配連接對(duì)象并對(duì)閑置的連接進(jìn)行回收稽穆。

連接池中的連接對(duì)象是由數(shù)據(jù)源(DataSource)創(chuàng)建的冠王。

連接池(Connection Pool)用來管理連接(Connection)對(duì)象。

JNDI(Java Naming and Directory Interface,Java命名和目錄接口):

在程序中使用JNDI獲取數(shù)據(jù)源舌镶。

通過數(shù)據(jù)源創(chuàng)建的連接對(duì)象被統(tǒng)一的放入到連接池中進(jìn)行管理柱彻。

搞清楚三者的關(guān)系豪娜,然后進(jìn)行下面的配置 : )

連接池的配置:

C3P0連接池在Spring的配置文件application.xml的配置:

<!-- 配置C3P0連接池: -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

? <property name="driverClass" value="${jdbc.driver}"/>

? <property name="jdbcUrl" value="${jdbc.url}"/>

? <property name="user" value="${jdbc.user}"/>

? <property name="password" value="${jdbc.password}"/>

</bean>

數(shù)據(jù)源的配置與使用數(shù)據(jù)源的方法:

1、配置Tomcat的conf/context.xml

<Resource name="jdbc/news"

? ? ? ? ? ? ? auth="Container"? type="javax.sql.DataSource"? maxActive="100"

? ? ? ? ? ? ? maxIdle="30" maxWait="10000" username="root"? password="root"

? ? ? ? ? ? ? driverClassName="com.mysql.jdbc.Driver"

? ? ? ? ? ? ? url="jdbc:mysql://127.0.0.1:3306/news"/>

? name=指定Resource的JNDI名稱

? auth=指定管理Resource的Manager(Container由容器創(chuàng)建和管理哟楷,Application由Web應(yīng)用創(chuàng)建和管理)

? type=指定Resource的java類

? maxActive=指定連接池中處于活動(dòng)狀態(tài)的數(shù)據(jù)庫連接的最大數(shù)量

? maxIdle=指定連接池中處于空閑狀態(tài)的數(shù)據(jù)庫的最大數(shù)量

? maxWait=指定連接池中連接處于空閑的最長(zhǎng)時(shí)間侵歇,超過這個(gè)時(shí)間會(huì)提示異常,取值為-1吓蘑,表示可以無限期等待惕虑,單位為毫秒(ms)

這里不要忘記:還需要將數(shù)據(jù)庫的驅(qū)動(dòng)jar包添加到,Tomcat安裝目錄下的lib文件夾中磨镶。

2溃蔫、使用JNDI獲取連接對(duì)象

lookup(java:comp/env/數(shù)據(jù)源名稱");

//java:comp/env/這是Java的語法要求,必須寫上琳猫。

//這里的數(shù)據(jù)源名稱就是上面的jdbc/news伟叛,這個(gè)news是項(xiàng)目名。

3.編寫代碼獲取數(shù)據(jù)源

? // 獲取數(shù)據(jù)庫連接

? public Connection getConnection2() {

? try {

? ? //初始化上下文

? ? Context cxt=new InitialContext();

? ? //獲取與邏輯名相關(guān)聯(lián)的數(shù)據(jù)源對(duì)象

? ? DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");

? ? conn=ds.getConnection();

? } catch (NamingException e) {

? ? // TODO Auto-generated catch block

? ? e.printStackTrace();

? } catch (SQLException e) {

? ? // TODO Auto-generated catch block

? ? e.printStackTrace();

? }

? return conn;

? }

還有一點(diǎn)要注意:測(cè)試連接是否成功脐嫂,需要在jsp頁面輸出connection统刮,而不是在java類中Run As,應(yīng)為數(shù)據(jù)源配置在Tomcat中需要把Web項(xiàng)目放入Tomcat容器中運(yùn)行账千。jsp頁面代碼如下:

示例:

<%

BaseDao baseDao=new BaseDao();

Connection connection=baseDao.getConnection2();

%>

<%=connection %>

在Tomcat中的配置

配置在:context.xml文件內(nèi)

F:\apache-tomcat-7.0.68-windows-x64\apache-tomcat-7.0.68\conf\context.xml

---------mySQL

<Resource name="jdbc/news"

auth="Container" type="javax.sql.DataSource"

maxActive="100"

maxIdle="30" maxWait="10000" username="root"

password="Admin001"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://127.0.0.1:3306/news"/>

----------Oracle

<Resource name="jdbc/orcl"

auth="Container" type="javax.sql.DataSource"

maxActive="100"

maxIdle="30" maxWait="10000" username="wuyong"

password="Admin001"

driverClassName="oracle.jdbc.OracleDriver"

url="jdbc:oracle:thin:@localhost:1521:orcl"/>

使用JNDI獲取連接對(duì)象

java:comp/env/jdbc/news

這段為固定寫法

java:comp/env/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侥蒙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匀奏,更是在濱河造成了極大的恐慌鞭衩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娃善,死亡現(xiàn)場(chǎng)離奇詭異论衍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)聚磺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門坯台,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘫寝,你說我怎么就攤上這事蜒蕾。” “怎么了矢沿?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵滥搭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我捣鲸,道長(zhǎng)瑟匆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任栽惶,我火速辦了婚禮愁溜,結(jié)果婚禮上疾嗅,老公的妹妹穿的比我還像新娘。我一直安慰自己冕象,他們只是感情好代承,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐扮,像睡著了一般论悴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墓律,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天膀估,我揣著相機(jī)與錄音,去河邊找鬼耻讽。 笑死察纯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的针肥。 我是一名探鬼主播饼记,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼慰枕!你這毒婦竟也來了具则?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捺僻,失蹤者是張志新(化名)和其女友劉穎乡洼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匕坯,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年拔稳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葛峻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巴比,死狀恐怖术奖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轻绞,我是刑警寧澤采记,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站政勃,受9級(jí)特大地震影響唧龄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奸远,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一既棺、第九天 我趴在偏房一處隱蔽的房頂上張望讽挟。 院中可真熱鬧,春花似錦丸冕、人聲如沸耽梅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眼姐。三九已至,卻和暖如春佩番,著一層夾襖步出監(jiān)牢的瞬間妥凳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工答捕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逝钥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓拱镐,卻偏偏與公主長(zhǎng)得像艘款,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沃琅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 單例模式:一個(gè)類里面只有一個(gè)實(shí)例哗咆,此實(shí)例只有自身能調(diào)用 properties里面的參數(shù) 不需要寫引號(hào)不加任何符號(hào) ...
    凱存閱讀 344評(píng)論 0 0
  • 一、單例模式 一個(gè)類里只有一個(gè)實(shí)例益眉,只有它本身可以調(diào)用 其它類想要調(diào)用晌柬,需要它提供一個(gè)全局訪問點(diǎn) 二、Pr...
    冷月_star閱讀 282評(píng)論 0 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,811評(píng)論 0 11
  • 單例模式:一個(gè)類里只有一個(gè)實(shí)例,其他對(duì)象想要調(diào)用此方法需要全局提供一個(gè)訪問點(diǎn) properties配置文件配置信息...
    Java勸退師閱讀 599評(píng)論 0 2
  • 個(gè)人估值是由個(gè)人決定的郭脂。它是完全主觀的年碘,它是基于行動(dòng)的,不是單純的愿望展鸡。因?yàn)樗腔谛袆?dòng)的屿衅,所以是可以被外人給記錄...
    星羽_1b75閱讀 232評(píng)論 0 0