【WebLogic使用】3.WebLogic配置jndi数据源

一、什么是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);
	}
}

可以看到,我们的数据库的驱动名,数据库名称,账号和密码都是通过“硬编码”写死在
程序里的。一旦我们的项目需要数据迁移,或者更换数据库的时候,我们就要停止应用,在代码中
修改数据库的连接信息,这样做非常繁琐和不安全。即使不更换数据库,我们在改变数据库的最大
连接数和最小连接数,以及数据库的其它配置等等,都需要在代码中进行修改,这十分不友好。

我们需要一种外部的数据源,来指定我们的应用程序来链接数据库,对此,我们的应用程序不必
关心数据库的配置,数据库的配置交由独立的模块管理和配置。

近年来,Web开发中涌现了许多框架,如hibernate/Mybatis/Spring,使用他们,可以通过
“数据库连接池”来管理数据库的链接和配置:
<!-- 配置c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	<property name="jdbcUrl" value="${jdbcUrl}"></property>
	<property name="driverClass" value="${driverClass}"></property>
	<property name="user" value="${user}"></property>
	<property name="password" value="${password}"></property>
	<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
	<property name="initialPoolSize" value="${initialPoolSize}"></property>
	<!--连接池中保留的最小连接数。Default: 3 -->
	<property name="minPoolSize" value="3"></property>
	<!--连接池中保留的最大连接数。Default: 15 -->
	<property name="maxPoolSize" value="${maxPoolSize}"></property>
	<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
	<property name="acquireIncrement" value="3"></property>
	<!--最大空闲时间,1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 -->
	<property name="maxIdleTime" value="1800"></property>
</bean>
并且把数据库配置单独放置在porperties配置文件中:

这样做就在应用层实现了数据库配置信息独立的机制。这样会使应用程序的数据库配置更加灵活。

而我们的WebLogic服务器,拥有绑定Jndi数据源的功能,也就是服务器来对应用程序的数据库配置
进行托管,应用程序只需要在其应用代码中制定使用jndi模式链接WebLogic的数据源信息即可。
当需要修改数据库信息的时候,根本不需要动应用程序的东西,只需要调整WebLogic的jndi数据源
中的数据库配置信息即可。

也即是说,WebLogic的jndi机制,在服务层实现了数据库配置信息独立的机制。


二、新建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,测试数据库是否连接成功并取到数据:



编写Servlet内容:

package com.cn.opensource.dbConn;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JndiConnectionServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("<h1>测试JNDI数据源连接</h1>");
		
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			conn = DatabaseConnection.getMySQLConnection();
			String sql = "select * from teacher";
			st = conn.createStatement();
			rs = st.executeQuery(sql);
			int i=0;
			while (rs.next()) {
				i++;
				out.println("第"+i+"个教师信息");
				out.println("编号:"+rs.getInt("number"));
				out.println("姓名:"+rs.getString("name"));
				out.println("性别:"+rs.getString("sex"));
				out.println("所属班级:"+rs.getString("classname"));
				out.println("住址:"+rs.getString("address"));
				out.println("<br/>");
			}
		} catch (Exception ex) {
			ex.printStackTrace();


		} finally {
			try {
				DatabaseConnection.Close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}

}

如果编译器没有给你自动在Web.xml中配置Servlet,别忘记自己配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <servlet>
    <servlet-name>JndiConnectionServlet</servlet-name>
    <servlet-class>com.cn.opensource.dbConn.JndiConnectionServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>JndiConnectionServlet</servlet-name>
    <url-pattern>/servlet/JndiConnectionServlet</url-pattern>
  </servlet-mapping>


</web-app>

接下来,将我们的测试程序部署在WebLogic服务器中:




启动服务器,访问应用路径,可以看到:


打开数据库的teacher表,数据一致

说明我们配置的数据源连接成功了!

转载请注明出处:http://blog.csdn.net/acmman/article/details/70146603

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
WebLogic配置数据源可以迁移到 Tomcat 中,但是需要进行一些修改。以下是在 Tomcat 中配置数据源的步骤: 1. 在 Tomcat 的 lib 目录下加入 JDBC 驱动。 2. 在 Tomcat 的 conf 目录下找到 server.xml 文件,在 \<GlobalNamingResources\> 标签下添加: ``` <Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="dbuser" password="dbpassword" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydatabase"/> ``` 这里的 name 属性为数据源JNDI 名称,可以自定义,但是需要在应用程序中使用相同的名称来访问数据源。 注意:根据你的数据库类型和 JDBC 驱动,可以修改 driverClassName 和 url 属性值。 3. 在应用程序的 web.xml 文件中,添加资源引用: ``` <resource-ref> <description>My DataSource Reference</description> <res-ref-name>jdbc/MyDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ``` 4. 通过 JNDI 查找数据源: ``` Context ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("java:/comp/env/jdbc/MyDataSource"); Connection connection = dataSource.getConnection(); ``` 这里的 "java:/comp/env/" 是固定的前缀,"jdbc/MyDataSource" 是数据源JNDI 名称。 以上是在 Tomcat 中配置数据源的简单步骤,但是具体实现可能会因为应用程序的不同而有所不同,需要根据实际情况来进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值