zoukankan      html  css  js  c++  java
  • 199. Spring Boot JNDI:这是虾米?

     

     

    【视频&交流平台】

    à SpringBoot视频http://t.cn/R3QepWG

    à SpringCloud视频http://t.cn/R3QeRZc

    à Spring Boot源码https://gitee.com/happyangellxq520/spring-boot

    à Spring Boot交流平台http://412887952-qq-com.iteye.com/blog/2321532

    à Spring Boot Shiro视频http://t.cn/R3QDMbh

    à Spring Boot 2.0 之Spring Data 和JPAhttp://t.cn/R1pSojf

     需求缘起:

           有一网友在博客中留言:

    您好,我想问下,如果要支持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?》。今天就先到这里吧。

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

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

    课程目录:

    《从零开始学Spring Boot》

    《从零开始学Spring Cloud》

    《Spring Boot实战篇之Shiro》

    《Spring Boot 2.0之Spring Data和JPA》

  • 相关阅读:
    linux文件锁flock【转】
    无尽的悲伤
    go的临时对象池--sync.Pool
    golang 小知识-持续更新中
    【转】Go Channels
    Golang文件名命名规则
    Parquet存储格式
    预装的Office2016,文件图标表显示以及新建失败问题解决 方法
    Gamma编码及Delta编码概述
    java web开发环境配置系列(二)安装tomcat
  • 原文地址:https://www.cnblogs.com/springboot-wuqian/p/9384853.html
Copyright © 2011-2022 走看看