准备工作:tomcat9+maven3+spring4
在spring配置JDNI数据源之前先了解下连接池、数据源、JNDI三者间的关系
连接池:
连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象。
连接池自动分配连接对象并对闲置的连接进行回收。
连接池中的连接对象是由数据源(DataSource)创建的。
连接池(Connection Pool)用来管理连接(Connection)对象。
数据源:
数据源(DataSource)用来连接数据库,创建连接(Connection)对象。
java.sql.DataSource接口负责建立与数据库的连接
由Tomcat提供,将连接保存在连接池中。
JNDI(Java Naming and Directory Interface,Java命名和目录接口):
在程序中使用JNDI获取数据源。
总结:通过数据源创建的连接对象被统一的放入到连接池中进行管理。
JNDI数据源属性解释:
name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称.
auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type:此名称所代表的类型,现在为javax.sql.DataSource
factory:指的是该Resource配置使用的是哪个数据源配置类,这里使用的是commons-dbcp.jar及其依赖的jar包,都放在tomcat的lib下
maxActive:表示一个数据库在此服务器上所能打开的最大连接数
maxIdle:表示一个数据库在此服务器上维持的最小连接数
maxWait:最大等待时间。10000毫秒
username:数据库连接的用户名
password:数据库连接的密码
driverClassName:数据库连接的驱动程序
url:数据库连接的地址
备注:tomcat版本不同则factory值不一样
tomcat7:或者tomcat8:factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
tomcat9:factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
spring配置JNDI数据源三种方式:
方法一:单个应用独享数据源
Tomcat的server.xml找到工程的Context节点,添加一个私有数据源
总结:优点简单,缺点重用性差
方法二:配置全局JNDI数据源,应用到单个应用
第一步:在Tomcat的server.xml中GlobalNamingResources节点下加一个全局数据源
第二步:在Tomcat的server.xml的Context节点,增加对全局数据源的引用ResourceLink
server.xml文件配置如下:
还有一种方式:在tomcat的context.xml中context节点引入Resource
context.xml文件配置如下:
WEB-INF/web.xml
总结:优点:重用性,可控性 缺点:配置相对第三种方法要繁琐一点,每个工程都得配
方法三:配置全局JNDI数据源,应用到所有Tomcat下部署的应用
第一步:在Tomcat的server.xml中GlobalNamingResources节点下加一个全局数据源
第二步:在Tomcat的context.xml中Context节点下加一个ResourceLink节点对第一步配置的数据源进行引用
server.xml文件配置如下:
context.xml文件配置如下:
WEB-INF/web.xml
总结:优点:重用性,一次性到位 缺点:没有可控性
spring配置文件引入JNDI数据源:
总结:
ResourceLink中global的name与server.xml中GlobalNamingResources的Resource的name一致
ResourceLink中name与spring中applicationContext.xml中jndi-name的name一致
项目启动加载spring配置文件applicationContext.xml根据jndi-name的name找到context.xml文件中ResourceLink的name,
从而得到对应的global的名字,进而找到全局jndi数据源