美文网首页
tomcat jdbc数据源的jndi配置

tomcat jdbc数据源的jndi配置

作者: 错对对 | 来源:发表于2021-03-04 09:41 被阅读0次

jndi是什么?

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展。两者之间的关键差别是目录服务中对象不但可以有名称还可以有属性(例如,用户有email地址),而命名服务中对象没有属性。

以上是引用百度百科的解释。JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。

那么怎么在一个简单的web服务中配置JNDI数据源呢?

1、在tomcat中context.xml文件中增加如下配置

<Context>
    <Resource name="jdbc/UserPlatformDB"
              type="javax.sql.DataSource"  auth="Container"
              description="Derby database for User Platform"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="" password=""
              driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
              url="jdbc:derby:/db/user-platform;create=true"/>
</Context>

或者通过外部文件覆盖tomcat中的配置文件 maven增加如下配置

     <configuration>
                    <mode>context</mode>
                    <contextFile>src/main/webapp/WEB-INF/context.xml</contextFile>
                    <contextReloadable>true</contextReloadable>
                    <backgroundProcessorDelay>5</backgroundProcessorDelay>
                    <path>/user-web</path>
                    <port>80</port>
     </configuration>

2、修改web.xml

   <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/UserPlatformDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

3、通过代码获取JNDI数据源配置信息

@WebListener
public class DBConnectionInitializerListener implements ServletContextListener {
    /**
     * 当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,
     * 并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
     *
     * @param sce
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        try {
            //获取上下文中jndi数据源信息
            InitialContext context = new InitialContext();
            DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/UserPlatformDB");
            if (dataSource != null) {
                DBConnectionPoolManager.setDataSource(dataSource);
                DBConnectionPoolManager.setMaxSize(10);
            } else {
                String databaseURL = "create=true";
                EmbeddedDataSource embeddedDataSource = new EmbeddedDataSource();
                embeddedDataSource.setDatabaseName("/db/user-platform");
                embeddedDataSource.setConnectionAttributes(databaseURL);
                DBConnectionPoolManager.setDataSource(embeddedDataSource);
                DBConnectionPoolManager.setMaxSize(10);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(sce);
    }

    /**
     * 当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。
     *
     * @param sce
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        DBConnectionPoolManager.releaseAllConnection();
        System.out.println(sce);
    }
}

4、把ServletContextListener监听添加容器中,在web.xml增加如下配置

 <listener>
        <listener-class>com.cdd.user.web.web.listener.DBConnectionInitializerListener</listener-class>
 </listener>

5、项目启动时,DBConnectionInitializerListener会自动获取JNDI数据源的配置信息,放到数据库连接池管理器DBConnectionPoolManager

项目地址:https://github.com/cuoduidui/geekbanglessons

相关文章

  • tomcat jdbc数据源的jndi配置

    jndi是什么? JNDI(Java Naming and Directory Interface,Java命名和...

  • 对实体 "characterEncoding"

    在tomcat中配置jndi(我也才刚刚正式认识它)数据源时,提示上面的错。 问题很简单,看提示大体的意识是“;”...

  • 一、灵活配置DataSource

    一、本课目标 能够使用属性文件配置数据源 能够使用JNDI数据源 二、配置数据源 2.1使用属性文件配置数据源 数...

  • Sharding-jdbc

    Sharding-jdbc依赖 1.配置多数据源 2.配置mybatis 3.配置Sharding-jdbc数据源...

  • SpringBoot--数据访问篇

    1. JDBC 默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源; ...

  • JNDI相关配置

    背景 本身已经搭建好了数据源,但是上线的时候老大说需要改为JNDI的配置方式,所以就整了下JNDI的配置,我使用的...

  • Spring_11 c3p0 使用入门

    c3p0 是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前...

  • springboot集成DataSource之druid

    SpringBoot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource。...

  • 主流Java数据库连接池比较及前瞻

    一、主流数据库连接池 C3p0: 实现数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。Hibern...

  • SpringBoot与数据访问

    效果: ​ 默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源; ...

网友评论

      本文标题:tomcat jdbc数据源的jndi配置

      本文链接:https://www.haomeiwen.com/subject/eswqqltx.html