参见博客:https://blog.csdn.net/acmman/article/details/70146603
参考视频教程:
一、什么是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);
-
}
-
}
--------------------- 本文来自 光仔December 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/acmman/article/details/70146603?utm_source=copy
上面的代码存在一个问题:每一次应用程序访问数据库都去创建一个connect,很消耗数据库的资源
如何解决了,采用数据库连接池
应用程序获得connect都是从连接池中获得,不在自己操作db获得connect,数据库连接池就好像线程池原理一样。
我们可以不用编写数据库连接池,现在有开源的数据库连接池
除了上面的c3p0等数据库连接池之外,weblogic也提供了数据库连接池,weblogic的数据库连接池是通过jndi容器进行管理的,需要进行配置,weblogic将数据库连接池存储
在jndi容器中,可以通过jndi获得weblogic的连接池
接下面我们来看看如何通过weblogic创建连接池
二、新建Mysql的JNDI数据源
访问http://localhost:7001/console/,登录进入WebLogic控制台主页。
点击左侧“域结构”下的“服务”下的“数据源”选项:
选择新建,一般数据源。
填写数据源的名称,JNDI名称以及选择数据库类型:
选择数据库驱动版本:
其它配置按照默认即可:
填写数据库的连接信息:
接下来点击测试配置,看一下是否能连接成功:
出现“连接测试成功”即表示数据库配置没有问题。
点击下一步,勾选服务器。
点击完成之后,我们服务器端的JNDI数据源就配置完毕了。
三、应用程序引用WebLogic的jndi数据源
我们在MyEclipse中创建一个WebProject测试工程:
我们在src中创建一个数据库连接类:
编写该连接类:
-
package com.cn.opensource.dbConn;
-
-
import java.sql.Connection;
-
import java.sql.SQLException;
-
import java.util.Properties;
-
-
import javax.naming.Context;
-
import javax.naming.InitialContext;
-
import javax.sql.DataSource;
-
-
public class DatabaseConnection {
-
//初始化上下文需要用到的工厂类
-
private final static String INITIAL_CONTEXT_FACTORY="weblogic.jndi.WLInitialContextFactory";
-
//WebLogic服务器的访问地址
-
private final static String PROVIDER_URL="t3://127.0.0.1:7001";
-
//WebLogic服务器中的JNDI数据源名称
-
private final static String MYSQL_JNDI_NAME="JNDI-MySqlDataSource";
-
-
-
//存储从JNDI容器中取出来的数据源
-
private static DataSource dsOracle = null;
-
private static DataSource dsMySQL = null;
-
-
static {
-
try {
-
//初始化WebLogic Server的JNDI上下文信息
-
Context context = getInitialContext();
-
//获取数据源对象
-
dsMySQL = (DataSource) context.lookup(MYSQL_JNDI_NAME);
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
-
/**
-
* MethodName: getInitialContext
-
* Description: 获得WebLogic ServerJNDI初始上下文信息
-
* @return
-
* @throws Exception
-
*/
-
private static Context getInitialContext() throws Exception {
-
Properties properties = new Properties();
-
//指定工厂类
-
properties.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
-
//指定服务器访问地址
-
properties.put(Context.PROVIDER_URL, PROVIDER_URL);
-
return new InitialContext(properties);
-
}
-
-
-
/**
-
* MethodName: getMySQLConnection
-
* Description: 获取MySQL数据库连接
-
* @return
-
* @throws SQLException
-
*/
-
public static Connection getMySQLConnection() throws SQLException {
-
return dsMySQL.getConnection();
-
}
-
-
-
/**
-
* MethodName: CloseConnection
-
* Description: 关闭数据库连接
-
* @return
-
* @throws SQLException
-
*/
-
public static void Close()throws SQLException {
-
if(dsMySQL!=null){
-
dsMySQL.getConnection().close();
-
}
-
}
-
}
然后,我们创建一个Servlet,测试数据库是否连接成功并取到数据:
--------------------- 本文来自 光仔December 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/acmman/article/details/70146603?utm_source=copy
客户端访问的代码如下:
上面是采用的java代码直接进行操作,如果是在j2ee中如何通过配置文件获得数据库连接池了
获取JNDI数据源
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。下面是一个简单的配置:
---------------------
本文来自 tingyuanss 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tingyuanss/article/details/44940061?utm_source=copy
通过jndiName指定引用的JNDI数据源名称。
Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。下面是使用jee命名空间引用JNDI数据源的配置:
- <beans xmlns=http://www.springframework.org/schema/beans
- xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
- xmlns:jee=http://www.springframework.org/schema/jee
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/jee
- http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
- <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>
- </beans>
只需要配置:
<jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>
--------------------- 本文来自 tingyuanss 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tingyuanss/article/details/44940061?utm_source=copy