当前位置: 首页 > 面试题库 >

如何在Spring的JdbcTemplate中重用相同的连接?

洪弘毅
2023-03-14
问题内容

我有以下代码:

    @Test
    public void springTest() throws SQLException{
        //Connect to the DB.
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:/data/h2/testa");
        dataSource.setUsername("");
        dataSource.setPassword("");
        JdbcTemplate jt=new JdbcTemplate(dataSource);
        jt.execute("SELECT 1");
        jt.execute("SELECT 1");
    }

我希望两条execute()行可以重用同一连接。但是,日志输出显示:

2011-02-10 12:24:17 DriverManagerDataSource [INFO]加载的JDBC驱动程序:org.h2.Driver
2011-02-10 12:24:17 JdbcTemplate [DEBUG]执行SQL语句[SELECT 1]
2011-02-10 12:24:17 DataSourceUtils [DEBUG]从DataSource获取JDBC连接
2011-02-10 12:24:17 DriverManagerDataSource [DEBUG]创建与[jdbc:h2:/ data / h2 / testa]的新JDBC DriverManager连接
2011-02-10 12:24:17 DataSourceUtils [DEBUG]将JDBC连接返回到DataSource
2011-02-10 12:24:17 JdbcTemplate [DEBUG]执行SQL语句[SELECT 1]
2011-02-10 12:24:17 DataSourceUtils [DEBUG]从DataSource获取JDBC连接
2011-02-10 12:24:17 DriverManagerDataSource [DEBUG]创建与[jdbc:h2:/ data / h2 / testa]的新JDBC DriverManager连接
2011-02-10 12:24:17 DataSourceUtils [DEBUG]将JDBC连接返回到DataSource

上面的例子运行得很快,但是我有一段更大的代码,基本上做同样的事情,并且挂了很久Creating new JDBC DriverManager Connection。我从来没有收到错误,但是它使代码运行非常缓慢。我可以以某种方式重构以上代码以仅使用相同的连接吗?

谢谢


问题答案:

这是使用Apache DBCP的示例:

BasicDataSource dbcp = new BasicDataSource();
dbcp.setDriverClassName("com.mysql.jdbc.Driver");
dbcp.setUrl("jdbc:mysql://localhost/test");
dbcp.setUsername("");
dbcp.setPassword("");

JdbcTemplate jt = new JdbcTemplate(dbcp);
jt.execute("SELECT 1");
jt.execute("SELECT 1");

log4j输出为:-

[DEBUG] [JdbcTemplate] [execute:416] - Executing SQL statement [SELECT 1]
[DEBUG] [DataSourceUtils] [doGetConnection:110] - Fetching JDBC Connection from DataSource
[DEBUG] [DataSourceUtils] [doReleaseConnection:332] - Returning JDBC Connection to DataSource
[DEBUG] [JdbcTemplate] [execute:416] - Executing SQL statement [SELECT 1]
[DEBUG] [DataSourceUtils] [doGetConnection:110] - Fetching JDBC Connection from DataSource
[DEBUG] [DataSourceUtils] [doReleaseConnection:332] - Returning JDBC Connection to DataSource


 类似资料:
  • 问题内容: 示例ViewModel: 主要活动: 我想调用第二个活动并使MainActivity接收更改。那可能吗? 问题答案: 调用时,您实际上创建/保留了绑定到的,因此不同的Activity具有不同的特性,并且每个Activity 使用给定的工厂创建a的不同实例,因此您不能在不同的s中具有相同的a实例。 但是,您可以通过传递自定义ViewModel工厂的单个实例(充当单例工厂)来实现此目的,因

  • 我正在开发一个需要在大型机上调用DB2函数以获取id的应用程序。 在spring应用程序上下文中,我定义了jdbc模板来查询zOS上的DB2: 然后,我将数据源定义如下: 以上工作。然而,看看ibm的db2jcc内部。jar文件中,我看到了一个用于连接池的datasource类-com。ibm。db2.jcc。DB2ConnectionPoolDataSource。所以我试着用它来代替上面的一个,

  • 我想在使用application.properties的项目中使用2个或更多的jdbcTemplate。我尝试了,但遇到了运行时异常。 canNotGetJDBCConnectionException:未能获得JDBC连接;嵌套异常是java.sql.sqlException:无法为在org.springframework.JDBC.datasource.datasourceUtils.getCo

  • 我有这样一个简单的数据框架: 结果是这样的 当他只有一个人,而且分数是75分,而不是40分和35分时,我如何将名为“Adi”的行与“Adi”的行组合在同一列中

  • 我使用Spring初始化器、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包生成了一个Spring Boot web应用程序。 使用的技术: 错误: