JNDI(Java命名与目录接口服务)
Java Naming and Directory Interface:
为Java程序提供访问名字与目录服务的API。即可以使用JNDI获得对现有名字服务、新创建的命名服务的访问,可以通过JNDI的服务提供程序接口(SPI)去集成更多不同种类的名字服务。
配置(tomcat):
1,在META-INF下新建context.xml文件:
1,在META-INF下新建context.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!--配置tomcat的JNDI-->
<Resource name="jdbc/MySQL"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?user=root;password=root;characterEncoding=
utf8&zeroDateTimeBehavior=convertToNull" />
<Resource name="jdbc/Oracle"
auth="Container"
type="javax.sql.DataSource"
username="zsj"
password="zsj"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:zsj"
maxActive="100"
maxIdle="30"
maxWait="10000" />
</Context>
2,在web.xml中配置:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MySQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3,把相关数据库驱动架包导入项目和tomcat中。
4,在Java代码中获得连接并操作数据库:
public static Connection getConnection(String jndiname) throws NamingException{
Connection conn = null;
Context initContext = new InitialContext();
//java:/comp/env固定,不需要改变
Context envContext = (Context) initContext.lookup("java:/comp/env");
//获得数据源
DataSource ds = (DataSource) envContext.lookup(jndiname);
if(ds != null){
try {
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
说明:
java:/comp/env
是标准的j2ee环境查找规则,使用这种方式必须做一次环境名到JNDI名的映射,这种隔离使得在写程序是不必关注真正的JNDI名,这与把JNDI名发到配置文件里是一样的。