spring使用tomcat连接池的问题

根据网上资料成功配置了tomcat的数据库连接池
具体方法:
1.把数据库JDBC驱动拷贝到%TOMCAT_HOME%/common/lib和%TOMCAT_HOME%/webapps/yourweb/WEB-INF/lib下
2.%TOMCAT_HOME%/conf/catalina/localhost/yxkh.xml如下
[code="xml"]

auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="10"
maxWait="1000"
username="xx"
password="xx"
driverClassName="com.ncr.teradata.TeraDriver"
url="jdbc:teradata://xx.xx.xx.xx/CLIENT_CHARSET=cp936,TMODE=TERA,CHARSET=ASCII,database=DW_PTEMP"
/>

3.web.xml添加

DB Connection
jdbc/teradataDB
javax.sql.DataSource
Container

4. 然后在jsp调用
javax.naming.Context context = new javax.naming.InitialContext();

javax.sql.DataSource ds = (javax.sql.DataSource)context.lookup("java:comp/env/jdbc/teradataDB");

java.sql.Connection conn = ds.getConnection();

能够成功打开数据库连接。

现在我的想法spring注入,避免在程序中出现
javax.naming.Context context = new javax.naming.InitialContext();

javax.sql.DataSource ds = (javax.sql.DataSource)context.lookup("java:comp/env/jdbc/teradataDB");

不知应该怎么配置,怎么使用,由于对spring不太熟悉,还望指教。谢谢!

补充:
再次查找了网上资料,应该如下来配置bean xml
class="org.springframework.jndi.JndiObjectFactoryBean">

java:comp/env/jdbc/TeradataDB


如果是正确的,在jsp中应该如何调用呢?

[b]问题补充:[/b]
to zhai puhong (高级程序员)
感谢你的回复。

你的意思spring配置一个bean就是数据库连接池了吗?



package yxkh.common;

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

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TeradataConnection {
private static Log log = LogFactory.getLog(TeradataConnection.class);

private DataSource dataSource; 

public TeradataConnection() {}

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}

public DataSource getDataSource() {
    return dataSource;
} 

public Connection getConnection() {
    Connection conn = null;

    try {
        conn = dataSource.getConnection();
    } catch (SQLException e) {
        log.error("连接数据库失败", e);
    } 

    return conn;
}

}

然后在jsp中,如下使用吗?
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
TeradataConnection db = (TeradataConnection ) ctx.getBean("dbConn");

db.getConnection();

3个回答

你这样配置应该是没有问题的。但是你是想jsp中或许数据源取得连接(Connection)吗,如果是这样,你就是绕开Spring和Hibernate直接和数据库打交道了,如果这样你可以自己写个jta来管理数据库事务。不过这种做法本身就是有问题的,既然用了Spring,有何苦在jsp搞那么“丑陋”的代码呢;

还有,使用Spring,完全可以这么配置数据源:
[code="java"]













[/code]

把一切都交给Spring,这样移植也方便的多。

我只是提个建议。

你的dataSource已经在spring ioc容器里了,如果你要调要jdbc的话,继承JdbcDaoSupport写一个类,然后配置到spring ico容器里面如:



在JSP中用spring提供的WebApplicationContextUtils类调用ioc 容器里的对像如:
TestJdbcDAO testDAO= WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()).getBean("testJdbcDAO")
testDAO.test();
当然如果你的DAO要支持事务的话,还要配置一下事务管理器 :D

再补一个上面的,你要自己写个ContextLoaderListener如下:
public class SpringContextLoaderListener extends ContextLoaderListener {
public static ApplicationContext applicationContext=null;
public static ApplicationContext applicationContext=null;
@Override
public void contextInitialized(ServletContextEvent event) {
super.contextInitialized(event);
//你applicationContext就是spring ioc容器了

applicationContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()).getBean(name);

}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问