文章内容和参考博文来源:
1 mybatis源码jar包–package org.apache.ibatis.datasource.jndi;
2 http://blog.csdn.net/reliveit/article/details/45136297
3 http://www.cnblogs.com/V1haoge/p/6675700.html
4 Spring 实战(第四版)第十章 通过spring和jdbc征服数据库
5 http://kingxss.iteye.com/blog/1481872
前言:
jndi方式配置数据源的方式还是很少见的,因为需要在项目之外的容器或服务上修改相应的配置文件,后期可能不便于部署项目,但是这个问题也有对应的解决办法,为了提高项目的可移植性,可以讲服务器上修改的配置文件内容放入到工程的META-INF目录的context.xml中(这个文件需要自行建立).总归而言,jndi方式配置数据源方式还是针对特定的需求来做的,比如说服务器性能很好.
在本文只是简单的介绍org.apache.ibatis.datasource.jndi包下JndiDataSourceFactory 工厂类的实现过程,以及具体运用和使用过程,至于涉及的一些底层原理以及一些常见模式,在本文先不做讨论,后续会针对org.apache.ibatis.datasource整个包做一些简要的分析.package org.apache.ibatis.datasource.jndi包下的源码本身不难,但是个人感觉对于一些知识点,提前了解一下,会很快就能了解org.apache.ibatis.datasource.jndi包下JndiDataSourceFactory类的实现过程.当前介绍的mybatis版本为:mybatis-3-mybatis-3.4.4.
前置知识点:
(1)jndi的概念: http://baike.baidu.com/item/JNDI?fr=aladdin
(2)Properties类和InitialContext类和Context类或接口中的方法功能以及大概实现过程.
(3)最好能找一下mybatis的Jndi+Tomcat配置数据源的大概过程,去和mybatis的pooled池型数据源以及unpooled非池型数据源的使用过程对比以下.
1、源码结构图:
2、mybatis的jndi形式的数据源使用步骤
在介绍具体源码的细节之前,先来说一下mybatis的jndi形式的数据源的使用步骤和一些细节问题,这样如果只是想了解如何使用mybatis的jndi方式去配置数据源,就不用继续看下面的源码分析了.在spring中使用jndi方式配置数据源大概分为下面几个步骤:
第一步:添加数据源信息到tomcat的conf目录下的server.xml或context.xml文件中,两者选择一个.
第二步:在Spring的配置文件,如applicationContext.xml配置文件中,引入jndi配置方式.
第三步:测试从spring中拿到datasource.
第一步:添加数据源信息到tomcat的conf目录下的server.xml或context.xml文件中,两者选择一个.
首先说明一下使用情形,是在spring框架的去使用JNDI数据源.因为spring项目经常部署在Java EE应用服务器中,如WebSphere,JBoss或甚至像Tomcat这样的Web容器中.这些服务器允许你配置通过JNDI获取数据源.这种配置的好处在于数据源完全可以在应用程序之外进行管理,这样应用程序只需在访问数据库的时候查找数据源就可以了.另外,在应用服务器中管理的数据源通常以池的方式组织,从而具备更好的性能,并且还支持系统管理员对其进行热切换.
第一步分为三种方式实现:
第一种方式:
在tomcat中的server.xml添加的代码如下形式:
<Context>
<Resource name="hello" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="postgres"
password="123456"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/center_db" />
</Context>
第二种方式:
在context.xml添加的代码如下形式:
<Resource name="hello" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="postgres"
password="123456"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/center_db" />
第三种方式:
在META-INF目录下新建的context.xml中(这个文件需要自行建立)
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="hello"
auth="Container"
type="javax.sql.DataSource"
driverClass="org.postgresql.Driver"
jdbcUrl="jdbc:postgresql://127.0.0.1:5432/center_db"
user="postgres"
password="123456"
maxPoolSize="10"
minPoolSize="2"
acquireIncrement="2" />
</Context>