zoukankan      html  css  js  c++  java
  • Tomcat中使用JNDI加载JDBC数据源

       以前写JDBC的时候总是手工写一个类,用硬代码写上className、url、用户名和密码什么的,然后通过DriverManager获取到Connection。那样写是很方便,但是如果想更改的话,需要修改源码再编译,给后期修改带来不便。最近看到可以使用JNDI的方法使用xml文件配置JDBC数据源,xml文件存放在war下面,这样的话就很方便我们修改jdbc的连接属性了。

      首先了解下JNDI吧,百度搜索结果:JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。拿我的理解就是:服务商提供一个api,然后可以利用JNDI查找到该服务商提供的功能。

      要想在Tomcat下使用JNDI配置数据源,首先得在META-INF目录下创建一个context.xml文件。例如:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <Context>
     3     <Resource
     4         name="jndi/datasource"  //数据源名称,在JNDI中用到
     5         type="javax.sql.DataSource" // 数据源类型
     6         driverClassName="com.mysql.jdbc.Driver" //驱动名称
     7         url="jdbc:mysql://localhost:3306/database"  //连接数据源的url
     8         username="name"  //数据库用户名
     9         password="pass" //数据库密码
    10         maxActive="10" //指定数据库连接池中处于活动状态的数据库连接最大数目,0表示不受限制
    11         maxldle="5"   //指定数据库连接池中处于空闲状态的数据库连接的最大数目,0表示不受限制
    12         maxWait="80000" //指定数据库连接池中的数据库连接处于空闲状态的最长时间(单位为毫秒),超过这一事件,将会抛出异常。-1表示可以无限期等              待。
    13     >
    14     
    15     </Resource>
    16 </Context>

    数据源配置好了,就开始调用了,调用代码如下:

     1     import javax.naming.InitialContext;
     2     import javax.naming.NamingException;
     3     import javax.sql.DataSource;
     4     private static InitialContext context;
     5     private static DataSource dataSource;
     6 
     7     public static Connection getConn(){
     8         Connection con = null;
     9         try {
    10             context = new InitialContext();
    11             dataSource = (DataSource) context.lookup("java:comp/env/jndi/datasource"); //此处的jndi/datasource 就是配置数据源的名称
    12             con = dataSource.getConnection();
    13         } catch (SQLException e) {
    14             e.printStackTrace();
    15         } catch (NamingException e) {
    16             e.printStackTrace();
    17         }
    18         return con;
    19     }

    这样就能获取到Connection了,然后就能和以前一样使用了。

      

  • 相关阅读:
    Topcoder 11351 TheCowDivOne
    Topcoder 14531 Softmatch
    Topcoder 13503 ConnectingGame
    CS Academy Round#5 E.Binary Matching
    洛谷 P5896 [IOI2016]aliens
    P5020 [NOIP2018 提高组] 货币系统
    P1868 饥饿的奶牛
    P3131 [USACO16JAN]Subsequences Summing to Sevens S
    P3959 [NOIP2017 提高组] 宝藏
    2021 Grade 8 whk Final-Test.(Summer) 复**况 & 文明观猴
  • 原文地址:https://www.cnblogs.com/bigbang92/p/tomcat-jndi-datasource.html
Copyright © 2011-2022 走看看