当前位置: 首页 > 知识库问答 >
问题:

Spring oracle datasource不会破坏连接

胡利
2023-03-14

对于Oracle池连接,我使用Oracle.jdbc.pool.OracleDataSource,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误:

ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>12.1.0.1</version>
</dependency>
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"> 
    <property name="URL" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <property name="connectionCachingEnabled" value="true" /> 
</bean>
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class DbConnect {

  @Autowired
  private DataSource dataSource;

  public Connection getConnection() throws SQLException {
      return dataSource.getConnection();
  }
}

另外,我在dao级别使用jdk7 try-with-resources语法进行连接:

 @Autowired
 private DbConnect dbConnect;

 public List<User> getAllUsers() {
    List<User> list = new ArrayList<>();

    try(Connection connection = dbConnect.getConnection()) {
        try(PreparedStatement preparedStatement = connection.prepareStatement("select * from V_USERS t")) {
            try(ResultSet resultSet = preparedStatement.executeQuery()) {
                while(resultSet.next()) {
                    list.add(RowFetcher.fetchUser(resultSet));
                }
            }
        }
    }
    catch(Exception e) {
        log.error(e.getMessage(), e);
    }

    return list;
}

弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中是否有错误?

提前感谢!

共有1个答案

东郭源
2023-03-14

可以设置数据源限制属性来控制缓存的大小。

<property name="connectionCacheProperties">
  <props>
     <prop key="MinLimit">${jdbc.limit.min}</prop>
     <prop key="MaxLimit">${jdbc.limit.max}</prop>
     <prop key="InitialLimit">${jdbc.limit.init}</prop>
  </props>
</property>
 类似资料:
  • 问题内容: 我听过关于此主题的不同回答,那么销毁PHP会话的肯定方法是什么? 在最简单的情况下,这是否足以真正终止用户与服务器之间的会话? 问题答案: 要销毁会话,您应该采取以下步骤: 删除会话数据 使会话ID无效 为此,我将使用以下代码: 为了确保会话ID无效,您应该只允许脚本启动的会话ID。因此,设置一个标志并检查它是否被设置: 此外,您可以使用此时间戳定期交换会话ID,以缩短其寿命:

  • 我正在使用spring boot开发一个小应用程序。我的问题是,我需要显示用户的名字时,一个用户的身份验证正确。每次身份验证(每次登录输入用户名和密码)都会正确显示名字。但是如果我们关闭浏览器并在会话超时之前重新打开它,而没有输入用户名和密码,则不会显示First name。 身份验证时我的口供 安全配置 会话列表 我参考了Java:为什么当tab或浏览器关闭时http会话不被破坏?,正如他们所说

  • 编辑1: 我目前从一个Main类调用它,如下所示: } 原文: 解释后代码如下: 我有一个带有JavaConfig的Spring应用程序,称之为主应用程序,它从库中导入另一个Spring JavaConfig类。这个导入的JavaConfig应该用一个方面包装在主应用程序中创建的任何数据源,这个方面有一个自动连接的LogDelegator。 只要主应用程序只包含一个数据源,一切都正常。但是,当我向

  • 使用这个延迟加载代码,我的lightbox中断:单击一个图像显示lightbox,但没有图像。 通过检查inspector,我可以看到lightbox img标签没有值。我猜在延迟加载将属性和值分配给图像之前,lightbox会检查src。 如何解决此问题?

  • 问题内容: 我知道Go中没有析构函数,因为从技术上讲没有类。这样,我用来执行与构造函数相同的功能。但是,有没有办法在终止的情况下创建某些东西来模仿析构函数,例如使用关闭文件?现在,我只是打电话给我,但这有点荒唐,我认为设计很差。正确的方法是什么? 问题答案: 在Go生态系统中,存在一种处理包装了宝贵(和/或外部)资源的对象的惯用语:一种专门用于释放该资源的特殊方法,通常通过该机制进行 显式 调用。

  • Hi有类似的错误,如重复条目。 失败:构建失败,但有一个异常。 > Java语言util。拉链ZipException:重复条目:android/support/annotation/AttrRes。班 尝试:使用--stacktrac选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。 生成失败 总时间:1分钟46.13秒 有人能告诉我如何在jar文件中找到重复的