一、什么是jndi数据源
JNDI是Java命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一。
我们平时开发web程序的时候,在连接数据库的时候,往往会编写一个连接数据库的类,
例如连接Mysql的类:
package cn.edu.hpu.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
//定义mysql的数据库连接地址:
public static final String DBDURL = "jdbc:mysql://localhost:3306/iqweb" ;
//mysql数据库的连接用户名
public static final String DBUSER = "root" ;
//mysql数据库的连接密码
public static final String DBPASS = "1234" ;
static{
try {
Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn=null;
try {
conn=DriverManager.getConnection(DBDURL,DBUSER,DBPASS);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(ResultSet rs,Statement st,Connection conn){
try {
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(Statement st,Connection conn){
close(null,st,conn);
}
}
可以看到,我们的数据库的驱动名,数据库名称,账号和密码都是通过“硬编码”写死在
程序里的。一旦我们的项目需要数据迁移,或者更换数据库的时候,我们就要停止应用,在代码中
修改数据库的连接信息,这样做非常繁琐和不安全。即使不更换数据库,我们在改变数据库的最大
连接数和最小连接数,以及数据库的其它配置等等,都需要在代码中进行修改,这十分不友好。
我们需要一种外部的数据源,来指定我们的应用程序来链接数据库,对此,我们的应用程序不必
关心数据库的配置,数据库的配置交由独立的模块管理和配置