`

199. Spring Boot JNDI:这是虾米?

阅读更多
 

 

【视频&交流平台】

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

 需求缘起:

       有一网友在博客中留言:

您好,我想问下,如果要支持jdni数据源,是不是把xx.datasource.type=jndi就行了吗?还是需要加什么配置或者修改什么东西吗?求大神赐教

       那么网友的问题就是在spring boot中jndi是怎么玩的。那么在具体使用前,我们会花点时间介绍下JNDI,通过接下来的系列,你会学习到:

(1)JNDI为何而生?

(2)什么是JNDI?

(3)在Tomcat中怎么玩JNDI?

(4)Spring Boot中怎么玩JNDI

       接下来我们来一起了解下虾米是JNDI吧。

 

一、JNDI为何而生?

1.1 JDBC的天下

我们如果要在程序中连接数据库的话,在没有JNDI的时候,就是使用JDBC(Java DataBase Connectivity,java数据库连接)了,是不是已经忘得差不多了,一起来回顾下吧,看如下连接数据库代码(代码支持左右滑动):

        Connection conn = null;
       try {
           Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());
           conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root");
           String sql = "select *from test";
           PreparedStatement ps = conn.prepareStatement(sql);
           ResultSet rs = ps.executeQuery();
           while (rs.next()) {
               System.out.println("id:" + rs.getInt("id") + ",name:" + rs.getString("name") + "");
           }
           conn.close();
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           if (conn != null) {
               try {
                   conn.close();
               } catch (SQLException e) {
               }
           }
       }

       这是在没有JNDI的连接方式。

1.2 存在问题?

       上面的这种方式存在的问题是什么呢?

(1)数据库服务器名称mydb 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;

(2)数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;

(3)随着实际使用终端的增加,原配置的连接池参数可能需要调整;

注意:实际上在使用了Spring等牛逼的框架之后,实际上上面这些问题已经不再是问题了。

 

1.3 解决方法

程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可

由此,就有了JNDI。从上面的分析可以得出,实际上是由容器来管理我们的数据库连接信息了。

 

二、什么是JNDI?

我们看下百度百科的描述(https://baike.baidu.com/item/JNDI/3792442):

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

       看完了之后,是不是感觉很抽象呢,这里我们需要理解这么几点:

(1)JNDI是J2EE的规范之一。

(2)JNDI主要有两部分组成:应用程序编程接口和服务供应商接口。应用程序编程接口提供了Java应用程序访问各种命名和目录服务的功能,服务供应商接口提供了任意一种服务的供应商使用的功能。

(3)J2EE 规范要求全部 J2EE 容器都要提供 JNDI 规范的实现。

(4)JNDI 提出的目的是为了解藕,避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

画外音:JNDI的出现,让数据库连接代码交给容器管理,比如Tomcat、JBOSS等容器,这样对于开发者就不用关心数据库配置是什么,使用的什么数据库驱动连接数据库等。

       为了更便于理解JNDI具体的使用姿势,我们在下一篇文章中会介绍下《在Tomcat中怎么玩JNDI?》。今天就先到这里吧。

 所有的课程最后一天优惠!点击「悟空学院」进行查看!

 

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

分享到:
评论

相关推荐

    com.sun.jndi.ldap.jar

    《com.sun.jndi.ldap.jar:Maven中的 LDAP 相关库解析》 在Java开发中,`com.sun.jndi.ldap.jar`是一个重要的库文件,它包含了Java Naming and Directory Interface (JNDI) 的 LDAP(Lightweight Directory Access ...

    com.sun.jndi.providerutil.jar

    《com.sun.jndi.providerutil.jar:Maven稀缺资源详解》 在Java开发领域,`com.sun.jndi.providerutil.jar`是一个至关重要的组件,它属于Sun Microsystems公司的JNDI(Java Naming and Directory Interface)框架的...

    javax.naming.NamingException: Cannot create resource instance

    javax.naming.NamingException: Cannot create resource instance类加载异常,希望可以帮助跟我一样错误的人。

    spring-framework-3.0.0.M4-with-docs

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    spring-mock.jar

    org.springframework.mock.jndi.ExpectedLookupTemplate.class org.springframework.mock.jndi.SimpleNamingContext.class org.springframework.mock.jndi.SimpleNamingContextBuilder.class org.springframework....

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    jndi.rar_jndi_site:www.pudn.com

    - **jndi.ppt**:这可能是一个PowerPoint演示文稿,详细介绍了JNDI的基本概念、API使用方法以及实例教程,是学习JNDI的好资料。通常,它会包含JNDI的工作原理、如何创建和查找上下文、绑定和解绑对象等内容。 - **...

    import com.sun.jndi.ldap.ctl.VirtualListViewControl;

    import com.sun.jndi.ldap.ctl.VirtualListViewControl;

    Spring boot 配置参数一览.pdf

    Spring Boot 是一个开源的 Java 基础框架,主要用于快速、简便地...此外,Spring Boot还支持通过命令行参数、环境变量、JNDI、Servlet上下文参数等多种方式设置配置参数。这为不同的部署和运行环境提供了极大的灵活性。

    spring-boot-reference.pdf

    Spring Boot Documentation 1. About the Documentation 2. Getting Help 3. First Steps 4. Working with Spring Boot 5. Learning about Spring Boot Features 6. Moving to Production 7. Advanced Topics II. ...

    spring获取weblogic jndi数据源的两种方式

    在Spring配置文件中,可以通过`org.springframework.jndi.JndiObjectFactoryBean`类来定义一个数据源。例如: ```xml <bean id="sysDB" class="org.springframework.jndi.JndiObjectFactoryBean"> ...

    JNDI.rar_jndi

    在Java应用中,JNDI常用来获取数据库连接或数据源,这正是"JNDI.rar_jndi"这个压缩包文件的主题。下面将详细阐述JNDI的工作原理、使用场景以及如何通过JNDI来获取数据库连接和数据源。 JNDI的主要功能包括查找、...

    jndi-1_2_1.zip_jndi_jndi-1.2.1.jar

    标题中的"jndi-1_2_1.zip_jndi_jndi-1.2.1.jar"表明这是一个关于JNDI的版本1.2.1的开源软件包,其中包含了一个名为"jndi-1.2.1.jar"的JAR文件。这个JAR文件包含了JNDI库的所有实现,使得开发者可以在他们的Java项目...

    spring配置JNDI数据源

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/MyDataSource"/> <!-- 其他Spring配置... --> ``` 这里,`jndiName`...

    spring3.1包名解析

    6. `org.springframework.context-3.1.0.M1.jar`: 扩展了IoC服务,提供邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及对多种视图层框架的封装,如JSP、FreeMarker等。 7. `org.springframework.core-...

    spring-aop-5.1.0.RELEASE.jar

    spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...

    JNDI数据库访问

    ### JNDI数据库访问知识点详解 #### 一、JNDI简介 JNDI(Java Naming and Directory Interface)是Java平台提供的一种标准目录服务接口,它允许Java应用程序查找和定位远程对象和服务。JNDI提供了统一的方式来进行...

    spring3+struts2+hibernate3的jar包

    在本"spring3+struts2+hibernate3的jar包"中,包含的jar文件是这三个框架的核心库,以及可能包括c3p0数据库连接池,用于高效管理数据库连接。c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范...

Global site tag (gtag.js) - Google Analytics