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了,然后就能和以前一样使用了。