文章目录
JNDI 概述和原理
这里使用的例子是之前 Mybatis 一对一 查询操作的例子
1. JDNI 概述:
1.1 什么是 JNDI
JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括 LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。可以将JNDI理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。
我们一般是在数据源这块使用JNDI,有些服务器(例如Tomcat)中自带数据库连接池,我们可以通过JNDI服务去这个连接池中找到对应的数据源Connection。
1.2 JNDI 的原理
就像 windows 上面的注册表:
在不同的文件夹中,有不同的注册表,而这些注册表在存储的时候使用的是 Map 类型。但是如果有两个注册表在不同的文件夹但是却拥有相同的名字怎么办呢?windows 在使用的使用的时候,key 存放的是路加名称径,而 value 存放的就是值。
在 tomcat 中,key 是一个字符串,value 是一个 Object 对象。
JDNI 搭建 maven 的 war 工程
由于 JNDI 需要使用到服务器(tomcat 自带连接池),所以一般的 java 工程是不够的,我们需要创建 web 工程或者 maven 的 war 工程。这里我们创建 maven 的 war 工程,使用 tomcat 服务器来提供 JNDI 的技术的实现。
1. 测试 JDNI 数据源的使用以及使用的细节
-
首先创建一个 maven war 工程。
-
然后,为了使用 JDNI,需要配置一个 Tomcat 服务器(不同的服务器有不同 JDNI 实现标准,这里以 Tomcat 为例子)。
-
然后在 webapp 文件夹下创建名为META-INF的文件夹,并创建 context.xml 文件,里面存放了数据库的连接信息:
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- <Resource name="jdbc/eesy_mybatis" 数据源的名称 type="javax.sql.DataSource" 数据源类型 auth="Container" 数据源提供者 maxActive="20" 最大活动数 maxWait="10000" 最大等待时间 maxIdle="5" 最大空闲数 username="root" 用户名 password="1234" 密码 driverClassName="com.mysql.jdbc.Driver" 驱动类 url="jdbc:mysql://localhost:3306/eesy_mybatis" 连接url字符串 /> --> <Resource name="jdbc/day23" type="javax.sql.DataSource" auth="Container" maxActive="20" maxWait="10000" maxIdle="5" username="root" password="root" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/day23?serverTimezone=Asia/Shanghai" /> </Context>
-
这个里面已经有了数据库连接的信息,所以需要修改 resources 文件夹下的 Mybatis 的注主配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置properties--> <properties resource="jdbcConfig.properties"></properties> <!--使用typeAliases配置别名,它只能配置domain中类的别名 --> <typeAliases> <package name="com.itheima.domain">