Spring利用JNDI获取数据源

在J2EE WEB容器中,设置数据源连接有多种方式。今天先来记录下JNDI获取连接的方式。

1.在WEB容器中定义JNDI数据源有多个地方,因为我是本地学习,使用的是TOMCAT,所以,就选择最合理的一种,即在

WEB项目中的META-INF下新建一个context.xm作为定义JNDI数据源的地方。



 auth = "Container"
 type = "javax.sql.DataSource"
 driverClassName="oracle.jdbc.driver.OracleDriver"
 url="jdbc:oracle:thin:@localhost:1521:orcl"
 username="***"
 password="***"
 maxActive="20"
 maxIdle="10"
 maxWait="10000">
 



在Spring中为了方便使用JNDI获取数据源连接,还给我们提供了org.springframework.jndi.JndiObjectFactoryBean类。

我们只需要在spring配置文件中定义那个bean,并指定jndi资源名即可。同时,我想要验证是否连接数据库成功,所以,

这里用到了JDBCTemplate,下面是配置文件。


  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"
    >
 
 
 
 

 
       
   

但是JNDI是在WEB容器中才能生效的,如果不启用tomcat容器好像会报环境变量的错误。所以,我干脆把项目变成spring mvc项目,其实也就是在web.xml中添加

tomcat启动就加载spring的监听。


  contextConfigLocation
  classpath:/springconfig.xml
 

 
 
  org.springframework.web.context.ContextLoaderListener
 

 


在项目中使用JDBCTemplate就很方便了,直接autowired注入即可。下面是我注入的代码


package com.springinaction.springidol;


import java.sql.Connection;
import java.sql.SQLException;


import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jndi.JndiObjectFactoryBean;
import org.springframework.stereotype.Component;
@Component
public class GetJNDIDatasource implements InitializingBean{
@Autowired
private JdbcTemplate jdbcTemplate;


@Override
public void afterPropertiesSet() throws Exception {
System.out.println(jdbcTemplate.queryForInt("SELECT count(*) FROM table"));

}


}


这里我使用了,spring的initialzingBean特性,其实就是相当于init-method在Spring初始化bean前,调用初始化结果。

下面是我使用的jar包截图。

Spring利用JNDI获取数据源_第1张图片

记录下,加深下影响。

你可能感兴趣的:(Spring之旅)