Java使用JNDI配置WEB项目数据源

Java使用JNDI配置WEB项目数据源

参考http://www.devzeng.com/blog/java-jndi-datasource.html

JNDI(Java Naming and Directory Interface,Java命名与目录接口)是Java提供的一种标准的命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI(Service Provider Interface,服务提供者接口)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

使用传统的方式

一般对于普通的项目,习惯上使用.properties的文件来配置数据源的一些信息。在.properties文件中配置数据源连接字符串、用户名、密码和驱动的类,然后在代码中读取配置文件的信息再通过DriverManager.getConnection(url, username, password)的方式获取数据源连接对象,步骤如下,以SQLServer为例:

(1)注册驱动

Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

(2)获取连接对象

Connection conn = DriverManager.getConnection(url, username, password);

(3)示例代码

public static Connection getDefaultConnection() {
    try {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=DBName";
        String username = "sa";
        String password = "*";
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        //注册SQLServer的驱动
        Class.forName(driver);
        //获取数据源连接对象
        Connection conn = DriverManager.getConnection(url,  username, password);
        return conn;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

使用JNDI的方式

1、获取数据源的连接对象Connection

public static Connection getConnection(String jndi) {
    DataSource datasource = null;
    Connection connection = null;
    try {
        Context context = new InitialContext();
        Context envContext = null;
        try {
            envContext = (Context) context.lookup("java:/comp/env");
        } catch (Exception e1) {
            // 无法通过java:方式获得换用/comp/env的方式
            try {
                envContext = (Context) context.lookup("/comp/env");
            } catch (Exception fff) {
                e1.printStackTrace();
            }
        }
        //如果数据源的名称不为空的话使用指定的数据源的名称来获取数据库连接对象
        if(StringUtils.isNotEmpty(jndi)) {
            datasource = (DataSource) envContext.lookup(jndi);
        } else {
            datasource = (DataSource) envContext.lookup("sqlserver/default");
        }
        connection = datasource.getConnection();
    } catch (Exception e2) {
        e2.printStackTrace();
    }
    return connection;
}

2、在Tomcat中的webapp中加入Resource配置

<Resource name="sqlserver/default"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30"
    maxWait="10000"
    username="sa"
    password="*"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://localhost:1433;databasename=DBNAME"/>

常见配置属性描述:

  • name:JDBC数据源的名称

  • auth:认证方式,一般设置为Container,还有一种是Application

  • type:当前配置资源的类别

  • factory:数据源工厂,默认为"org.apache.commons.dbcp.BasicDataSourceFactory"

  • driverClassName:驱动的全路径类名

  • maxActive:当前数据源支持的最大并发数

  • maxIdle:连接池中保留最大数目的闲置连接数

  • maxWait:当连接池中无连接时的最大等待毫秒数,在等当前设置时间过后还无连接则抛出异常

  • username:访问数据库的用户名

  • password:访问数据库的密码

  • url:JDBC驱动的连接字符串

  • validationQuery:在返回应用之前,用于校验当前连接是否有效的SQL语句,如果指定了,当前查询语句至少要返回一条记录,可以写成select top 1 * from sysobjects

3、在Tomcat的lib目录下面添加数据库的驱动文件

MySQL:mysql-connector-java-5.1.20-bin.jar

SQLServer:sqljdbc4.jar

Oracle:ojdbc14.jar

4、在web.xml加入如下配置

<resource-ref>
    <res-ref-name>sqlserver/default</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

注:属于可选配置,如果在web.xml中加入了上面的配置,则需要在Tomcat中一定要配置对应的Resource,否则会报错。

5、使用方式

Connection conn = getConnection("sqlserver/default");
...
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值