WebLogic配置JDBC數據源

1. 

最近針對某銀行的web項目上線,部署在他們的weblogic機器上,根據銀行的規範,部署在WebLogic Server上的應用程序如果需要訪問數據庫,原則上需要通過WebLogic提供的JDBC連接池來管理數據庫連接。

WebLogic Server中,通過配置JDBC數據源創建數據庫連接。將數據源定向或部署到服務器或集羣的時候,數據庫連接就建立了。每個數據源包含一組池化的數據庫連接。應用程序按名稱在JNDI樹上查找數據源,獲取數據源連接,完成數據庫操作,調用connection.close()將連接歸還給連接池。

2.配置步驟講解

(1)開啓weblogic管理服務器,進入weblogic管理控制檯點擊左側服務→【數據源然後點擊右側【新建→【般數據源



(2)填寫JDBC數據源的【名稱】、【jndi名稱】,選擇數據庫類型

數據源名稱WebLogic用於在本域內唯一標識資源項的,不僅要求一個域內配置的多個數據源不能重名,而且不能與域中配置的其他實體如:主機、集羣、服務器的名稱重名

JNDI名稱:是應用程序獲取數據源所使用的名稱,由應用決定。



(3)選擇Oracle數據庫的驅動程序在驅動的種類中,non-XA驅動通常比XA驅動性能好在非特殊情況下均採用4種JDBC驅動如圖所示


(4)事務處理選項,默認即可。


(5)根據所連數據庫的信息,填寫數據庫的連接信息:要連接的數據庫,數據庫的IP地址,連接數據庫時使用的端口號,登錄數據庫時使用的用戶名和密碼


(6)點擊【測試配置】.按鈕,測試數據源是否正常。



這時候如果出現如下場景:


檢查URL的值,這裏值爲:jdbc:oracle:thin:@10.0.2.55:1521:orcl.localdomain改爲jdbc:oracle:thin:@10.0.2.55:1521/orcl.localdomain。即把服務名前:改爲/

再次點擊測試配置,出現如下,表示數據源創建成功。


(7)點擊完成,回到數據源界面,目標爲空,點擊數據源鏈接


(8)點擊目標選項卡,選擇要部署數據源的服務器,點擊保存,數據源配置成功。


(9)連接池容量配置建議:

選擇【配置】【連接池】,可以看到連接池的相關容量配置:


初始容量:根據應用需要配置,對於實時交易類應用系統,一般設置爲能滿足日常運行需求峯值要求,同時考慮數據庫對連接數的限制和容量限制

最大容量:根據應用需要和數據庫連接數限制相應設置

最小容量:一般和初始容量相同。

3.在程序中獲取及還回連接

public class DBUtil {
	// 獲取日誌類
	private static  final Logger log = Logger.getLogger("DBUtil.class");
	// 初始化上下文需要用到的工廠類
	private static final String INITIAL_CONTEXT_FACTORY = "weblogic.jndi.WLInitialContextFactory";
	// weblogic服務器的訪問地址
	private static final String PROVIDER_URL = "t://10.0.2.181:8101";
	// Weblogic服務器中的JNDI數據源名稱
	private static final String JNDI = "JNDI/SplOrcl";
	private static Context context = null;

	static {

		Hashtable<String, String> ht = new Hashtable<String, String>();
		ht.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
		ht.put(Context.PROVIDER_URL, PROVIDER_URL);

		try {
			// 初始化weblogic server的JNDI上下文信息
			context = new InitialContext(ht);
		} catch (NamingException e) {
			log.info("DBUtils : Exit -->[Context init error]");
			log.error("InitialContext(naming)--[message:" + e.getMessage()
					+ "]");
		}
	}

	
	public static Connection getConnect() {
		Context ctx = null;
		Connection conn = null;
		try {

			ctx = context;
			// 獲取數據源對象
			javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(JNDI);
			// 獲取數據源連接
			conn = ds.getConnection();
		} catch (SQLException e) {
			log.info("DBUtils : Exit-->[getConnection error because : "
					+ e.getMessage() + " ]");
			log.error("get db connection error(sql)--[errorCode:"
					+ e.getErrorCode() + ";message:" + e.getMessage()
					+ "]");
		} catch (NamingException e) {
			log.info("DBUtils : Exit-->[getConnection error because:"
					+ e.getMessage() + "]");
			log.error("get db connection error(naming)--[message:"
					+ e.getMessage() + "]");
		} catch (Exception e) {
			log.info("DBUtils : Exit-->[getConnection error because:"
					+ e.getMessage() + "]");
			log.error("get db connection error(other)--[message:"
					+ e.getMessage() + "]");
		}
		return conn;
	}

	
	public static void close(ResultSet rs, Statement stat, Connection conn) {
		try {
			if (rs != null)
				rs.close();
			if (stat != null)
				stat.close();
			if (conn != null)
				conn.close();
		} catch (SQLException e) {
			log.info("DBUtils : Exit-->[close resource error because:"
					+ e.getMessage() + "]");
			log.error("close db connection error--[errorCode:"
					+ e.getErrorCode() + ";message:" + e.getMessage()
					+ "]");
		}
	}

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章