tomcat jdbc數(shù)據(jù)源的jndi配置

jndi是什么呜投?

JNDI(Java Naming and Directory Interface,Java命名和目錄接口)是SUN公司提供的一種標(biāo)準(zhǔn)的Java命名系統(tǒng)接口,JNDI提供統(tǒng)一的客戶端API攘轩,通過(guò)不同的訪問(wèn)提供者接口JNDI服務(wù)供應(yīng)接口(SPI)的實(shí)現(xiàn),由管理者將JNDI API映射為特定的命名服務(wù)和目錄系統(tǒng)码俩,使得Java應(yīng)用程序可以和這些命名服務(wù)和目錄服務(wù)之間進(jìn)行交互度帮。目錄服務(wù)是命名服務(wù)的一種自然擴(kuò)展。兩者之間的關(guān)鍵差別是目錄服務(wù)中對(duì)象不但可以有名稱還可以有屬性(例如稿存,用戶有email地址)笨篷,而命名服務(wù)中對(duì)象沒(méi)有屬性。

以上是引用百度百科的解釋瓣履。JNDI(Java Naming and Directory Interface)是一個(gè)應(yīng)用程序設(shè)計(jì)的API率翅,為開(kāi)發(fā)人員提供了查找和訪問(wèn)各種命名和目錄服務(wù)的通用、統(tǒng)一的接口袖迎,類(lèi)似JDBC都是構(gòu)建在抽象層上“财福現(xiàn)在JNDI已經(jīng)成為J2EE的標(biāo)準(zhǔn)之一,所有的J2EE容器都必須提供一個(gè)JNDI的服務(wù)瓢棒。

那么怎么在一個(gè)簡(jiǎn)單的web服務(wù)中配置JNDI數(shù)據(jù)源呢浴韭?

1、在tomcat中context.xml文件中增加如下配置

<Context>
    <Resource name="jdbc/UserPlatformDB"
              type="javax.sql.DataSource"  auth="Container"
              description="Derby database for User Platform"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="" password=""
              driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
              url="jdbc:derby:/db/user-platform;create=true"/>
</Context>

或者通過(guò)外部文件覆蓋tomcat中的配置文件 maven增加如下配置

     <configuration>
                    <mode>context</mode>
                    <contextFile>src/main/webapp/WEB-INF/context.xml</contextFile>
                    <contextReloadable>true</contextReloadable>
                    <backgroundProcessorDelay>5</backgroundProcessorDelay>
                    <path>/user-web</path>
                    <port>80</port>
     </configuration>

2脯宿、修改web.xml

   <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/UserPlatformDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

3念颈、通過(guò)代碼獲取JNDI數(shù)據(jù)源配置信息

@WebListener
public class DBConnectionInitializerListener implements ServletContextListener {
    /**
     * 當(dāng)Servlet 容器啟動(dòng)Web 應(yīng)用時(shí)調(diào)用該方法。在調(diào)用完該方法之后连霉,容器再對(duì)Filter 初始化榴芳,
     * 并且對(duì)那些在Web 應(yīng)用啟動(dòng)時(shí)就需要被初始化的Servlet 進(jìn)行初始化。
     *
     * @param sce
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        try {
            //獲取上下文中jndi數(shù)據(jù)源信息
            InitialContext context = new InitialContext();
            DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/UserPlatformDB");
            if (dataSource != null) {
                DBConnectionPoolManager.setDataSource(dataSource);
                DBConnectionPoolManager.setMaxSize(10);
            } else {
                String databaseURL = "create=true";
                EmbeddedDataSource embeddedDataSource = new EmbeddedDataSource();
                embeddedDataSource.setDatabaseName("/db/user-platform");
                embeddedDataSource.setConnectionAttributes(databaseURL);
                DBConnectionPoolManager.setDataSource(embeddedDataSource);
                DBConnectionPoolManager.setMaxSize(10);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(sce);
    }

    /**
     * 當(dāng)Servlet 容器終止Web 應(yīng)用時(shí)調(diào)用該方法跺撼。在調(diào)用該方法之前窟感,容器會(huì)先銷(xiāo)毀所有的Servlet 和Filter 過(guò)濾器。
     *
     * @param sce
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        DBConnectionPoolManager.releaseAllConnection();
        System.out.println(sce);
    }
}

4歉井、把ServletContextListener監(jiān)聽(tīng)添加容器中柿祈,在web.xml增加如下配置

 <listener>
        <listener-class>com.cdd.user.web.web.listener.DBConnectionInitializerListener</listener-class>
 </listener>

5、項(xiàng)目啟動(dòng)時(shí)哩至,DBConnectionInitializerListener會(huì)自動(dòng)獲取JNDI數(shù)據(jù)源的配置信息躏嚎,放到數(shù)據(jù)庫(kù)連接池管理器DBConnectionPoolManager

項(xiàng)目地址:https://github.com/cuoduidui/geekbanglessons

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市菩貌,隨后出現(xiàn)的幾起案子卢佣,更是在濱河造成了極大的恐慌,老刑警劉巖箭阶,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虚茶,死亡現(xiàn)場(chǎng)離奇詭異戈鲁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嘹叫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)婆殿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人待笑,你說(shuō)我怎么就攤上這事鸣皂∽デ矗” “怎么了暮蹂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)癌压。 經(jīng)常有香客問(wèn)我仰泻,道長(zhǎng),這世上最難降的妖魔是什么滩届? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任集侯,我火速辦了婚禮,結(jié)果婚禮上帜消,老公的妹妹穿的比我還像新娘棠枉。我一直安慰自己,他們只是感情好泡挺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布辈讶。 她就那樣靜靜地躺著,像睡著了一般娄猫。 火紅的嫁衣襯著肌膚如雪贱除。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天媳溺,我揣著相機(jī)與錄音月幌,去河邊找鬼。 笑死悬蔽,一個(gè)胖子當(dāng)著我的面吹牛扯躺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝎困,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缅帘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了难衰?” 一聲冷哼從身側(cè)響起钦无,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盖袭,沒(méi)想到半個(gè)月后失暂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彼宠,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年弟塞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凭峡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡决记,死狀恐怖摧冀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情系宫,我是刑警寧澤索昂,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站扩借,受9級(jí)特大地震影響椒惨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潮罪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一康谆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫉到,春花似錦沃暗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至导而,卻和暖如春忱叭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背今艺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工韵丑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虚缎。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓撵彻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親实牡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陌僵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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