Spring利用JNDI获取数据源
在J2EE WEB容器中,设置数据源连接有多种方式。今天先来记录下JNDI获取连接的方式。1.在WEB容器中定义JNDI数据源有多个地方,因为我是本地学习,使用的是TOMCAT,所以,就选择最合理的一种,即在WEB项目中的META-INF下新建一个context.xm作为定义JNDI数据源的地方。 auth = "Container" type = "javax.sql
在J2EE WEB容器中,设置数据源连接有多种方式。今天先来记录下JNDI获取连接的方式。
1.在WEB容器中定义JNDI数据源有多个地方,因为我是本地学习,使用的是TOMCAT,所以,就选择最合理的一种,即在
WEB项目中的META-INF下新建一个context.xm作为定义JNDI数据源的地方。
<?xml version="1.0" encoding="UTF-8"?>
<context>
<Resource name="jndi/oracle"
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">
</Resource>
</context>
在Spring中为了方便使用JNDI获取数据源连接,还给我们提供了org.springframework.jndi.JndiObjectFactoryBean类。
我们只需要在spring配置文件中定义那个bean,并指定jndi资源名即可。同时,我想要验证是否连接数据库成功,所以,
这里用到了JDBCTemplate,下面是配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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"
>
<context:component-scan base-package="com.springinaction.springidol" />
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jndi/oracle"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasource" />
</bean>
</beans>
但是JNDI是在WEB容器中才能生效的,如果不启用tomcat容器好像会报环境变量的错误。所以,我干脆把项目变成spring mvc项目,其实也就是在web.xml中添加
tomcat启动就加载spring的监听。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/springconfig.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
在项目中使用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包截图。
记录下,加深下影响。
更多推荐
所有评论(0)