从InitialContext获取数据源

摘要:
在web开发中,获取数据源的常见方式是将数据源定义为springbean,其他类通过spring-injection获取数据源。系统中未使用Spring框架。解决这个问题可能有很多方法。以下是基于InitialContext的解决方案。解决方案javax。命名。InitialContext=newjavax。命名。InitialContext();javax.sql.DataSourceds=ic.loookup;附加说明:为单个web容器配置的JNDI需要前缀固定前缀才能查找JNDI。例如,Tomcat需要前缀为“java:comp/env/”。以上只是最直接的方法。考虑到InitialContext是一个重量级的类,应该进行某些优化以减少其创建时间。

概述

本文介绍如何从javax.naming.InitialContext中获取web容器配置的数据源。

在web开发中,常见的获取数据源的方式是把数据源定义为spring的bean,其他类通过spring注入来获取数据源。可能遇到的问题如下:

  1. 需要获取数据源的类不是spring bean,无法接收注入。
  2. 系统中没有使用spring框架。

解决问题的方法可能有很多,这里提供基于InitialContext的解决方案。

解决方案

javax.naming.InitialContext ic = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ic.lookup(jndiName);

补充说明:

  1. 个别web容器配置的JNDI需要加固定前缀才是可查找JNDI,如Tomcat,需要加前缀"java:comp/env/"。
  2. 以上展示的仅仅只是最直接的做法,考虑到InitialContext是一个重量级的类,应该进行一定的优化来减少其创建次数。

以下提供一个项目中使用的工具类:

从InitialContext获取数据源第1张从InitialContext获取数据源第2张
 1 package cn.com.hnisi.baseservices.db;
 2 import javax.naming.InitialContext;
 3 import javax.naming.NamingException;
 4 import javax.sql.DataSource;
 5 import cn.com.hnisi.baseservices.config.Config;
 6 /**
 7  * SINOBEST 数据源工厂,用于获取DataSource.<br>
 8  * 使用JNDI查找上下文中的DataSource.<br>
 9  * @author lijinlong
10  *
11  */
12 public class DataSourceFactory {
13     private static DataSourceFactory instance;
14     private static InitialContext context;
15     /** 默认的数据源的jndi名称属性的key */
16     private static final String DEFAULT_DATASOURCE_PROP_KEY = "DB.DATASOURCE";
17      
18     private DataSourceFactory() {
19         super();
20     }
21      
22     /**
23      * 单例模式获取工厂实例.<br>
24      * @return
25      */
26     public static final synchronized DataSourceFactory newInstance() {
27         if (instance == null)
28             instance = new DataSourceFactory();
29         return instance;
30     }
31      
32     /**
33      * 获取默认的DataSource.<br>
34      * 根据config/config.properties中DB.DATASOURCE属性值查找.<br>
35      * @return
36      */
37     public DataSource getDefaultDataSource() {
38         String jndiName = Config.getInstance().getValue(DEFAULT_DATASOURCE_PROP_KEY);
39         DataSource ds = getDataSource(jndiName);
40         return ds;
41     }
42      
43     /**
44      * 根据JNDI名称,获取上下文中的DataSource.<br>
45      * @param jndiName
46      * @return
47      */
48     public synchronized DataSource getDataSource(String jndiName) {
49         DataSource ds = null;
50         try {
51             if (context == null)
52                 context = new InitialContext();
53             ds = (DataSource)context.lookup(jndiName);
54         } catch (NamingException e) {
55             e.printStackTrace();
56         }
57         return ds;
58     }
59 }
DataSourceFactory

免责声明:文章转载自《从InitialContext获取数据源》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[SHOI2015]聚变反应炉redis-cluster集群安装(基于redis-3.2.10)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue中使用Ueditor编辑器

一、 下载包: 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器,官网地址为:       http://ueditor.baidu.com/website/ 下载解压后会得到如果下文件目录: 将上述Ueditor文件夹拷贝到vue项目的static文件夹中,此文件夹为项目的静态服务文件夹; 二、 修改配置 在ueditor.c...

Window下的git配置文件在哪里【图文】

来源:https://jingyan.baidu.com/article/870c6fc3589f22b03fe4be95.html 第一次使用码云建仓库总是提示各种错误,遂,从头在学一遍git,改篇文章完全借鉴于百度经验,摘抄下来是为了以后好找,以下是正文: 全局配置文件   1、通常,我们会在git bash中输入 git config --globa...

vue cli 3

介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统 通过 @vue/cli 搭建交互式的项目脚手架。 通过 @vue/cli + @vue/cli-service-global 快速开始零配置原型开发。 一个运行时依赖 (@vue/cli-service) 一个开发环境依赖,局部安装在每个 @vue/cli 创建的项目中。 可升...

java中对Redis的缓存进行操作

Redis是一个NoSQL数据库,也是一个高性能的key-value数据库。一般我们在做Java项目的时候,通常会了加快查询效率,减少和数据库的连接次数,我们都会在代码中加入缓存功能。Redis的高效缓存功能给我们解决了难题。下面我主要讲讲在Java项目中怎么去连接Redis服务器以及需要注意的事项。 1.导入必须的Jar包 使用Java操作Redis...

vue实现PC端分辨率适配

lib-flexible + px2rem Loader lib-flexible 阿里伸缩布局方案 px2rem-loader:px转rem; 依赖 首先需要安装 vue-cli 脚手架,这里我安装的是 cli3。 项目初始化完成后,在项目目录中安装 lib-flexible 和 px2rem-loader。 npm install lib-flex...

AWS S3 JAVASCRIPT SDK 上传

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <!-- <script src="https://sdk.amazona...