Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法获取JDBC连接-连接关闭问题_Java_Spring_Jpa_Jdbc_Eclipselink - Fatal编程技术网

Java 无法获取JDBC连接-连接关闭问题

Java 无法获取JDBC连接-连接关闭问题,java,spring,jpa,jdbc,eclipselink,Java,Spring,Jpa,Jdbc,Eclipselink,在生产环境中,我遇到以下错误 org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (The Network Adapter could not establish the connection) 当我通过

在生产环境中,我遇到以下错误

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (The Network Adapter could not establish the connection)
当我通过蟾蜍连接时,它说ORA-12541没有侦听器错误。重新启动linstener后,问题得到解决

但实际的问题可能是web应用程序打开了很多连接,而它并没有关闭这些连接。下面是我的代码和配置

我正在使用EcllipseLink、dbcp2进行连接

<persistence-unit name="persistance-unit" transaction-type="RESOURCE_LOCAL">
        <class>com.company.model.Characteristic</class>
        ...
        <!--more classes -->

        <exclude-unlisted-classes>true</exclude-unlisted-classes>

        <properties>
            <property name="eclipselink.weaving" value="false"/>
        </properties>

    </persistence-unit>

com.company.model.Characteristic
...
真的
dbcp2设置

<bean id="datasource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxIdle" value="10" />
        <property name="maxTotal" value="200" />
        <property name="maxWaitMillis" value="60000" />
        <property name="validationQuery" value="select 1 from dual" />
        <property name="validationQueryTimeout" value="10" />
        <property name="testOnBorrow" value="true" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="30000" />
        <property name="minEvictableIdleTimeMillis" value="60000" />
        <property name="numTestsPerEvictionRun" value="5" />
        <property name="defaultAutoCommit" value="true" />
    </bean>

连接工厂

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="persistance-unit"/>
        <property name="dataSource" ref="datasource"/>

        <property name="jpaVendorAdapter">
            <bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
                <property name="showSql" value="true"/>
                <property name="database" value="ORACLE"/>
            </bean>
        </property>
</bean>

事务管理

抽象泛型

public abstract class  GenericDao<T> implements IGenericDao<T> {

    @PersistenceContext
    protected EntityManager entityManager

    private Class<T> type


    public GenericDao() {
        Type t = getClass().getGenericSuperclass()
        ParameterizedType pt = (ParameterizedType) t
        type = (Class) pt.getActualTypeArguments()[0]
    }

    @Override
    public T save(final T t) {
        this.entityManager.persist(t)
        return t
    }

    public def saveObj(def t) {
        try {
            this.entityManager.persist(t)
        }catch(e){
            log.info("Error occured: ", e)
        }
        return t
    }

    @Override
    public void delete(final Object id) {
        this.entityManager.remove(this.entityManager.getReference(type, id))
    }

    @Override
    public T find(final Object id) {
        return (T) this.entityManager.find(type, id)
    }

    @Override
    public T update(final T t) {
        return this.entityManager.merge(t)    
    }

    @Override
    public def executeNamedQuery(String namedQueryName, Map<String, Object> queryParams)
    {
      List results = null
      try {
        Query query = entityManager.createNamedQuery(namedQueryName)
        if (queryParams) {
          addPrametersToQuery(query, queryParams)
        }
        results = query.getResultList()
      } catch (NoResultException e) {
      } catch (Exception e) {
        log.error("Error occured: ", e)
        throw e
      }
      return results
    }       
}
公共抽象类GenericDao实现IGenericDao{
@持久上下文
受保护的实体管理器实体管理器
私有类类型
公共GenericDao(){
类型t=getClass().getGenericSuperclass()
参数化类型pt=(参数化类型)t
类型=(类)pt.getActualTypeArguments()[0]
}
@凌驾
公共T保存(最终T){
this.entityManager.persist(t)
返回t
}
公共def saveObj(def t){
试一试{
this.entityManager.persist(t)
}捕获(e){
log.info(“发生错误:”,e)
}
返回t
}
@凌驾
公共无效删除(最终对象id){
this.entityManager.remove(this.entityManager.getReference(类型,id))
}
@凌驾
无法找到公共对象(最终对象id){
返回(T)this.entityManager.find(类型,id)
}
@凌驾
公共T更新(最终T){
返回此.entityManager.merge(t)
}
@凌驾
public def executeNamedQuery(字符串名称queryName,映射queryParams)
{
列表结果=null
试一试{
Query Query=entityManager.createNamedQuery(namedQueryName)
if(查询参数){
addPrametersToQuery(查询,查询参数)
}
结果=query.getResultList()
}捕获(noresulte异常){
}捕获(例外e){
log.error(“发生错误:”,e)
掷e
}
返回结果
}       
}
使用该泛型Dao的Dao组件

@Component("characteristicDao")
class CharacteristicDao extends GenericDao<Characteristic> implements ICharacteristicDao {

    public def getCharacteristics(String name){
        log.info("Entering getCharacteristics")
        Characteristic characteristic = (PrmCharacteristic) executeQueryWithSingleResult("select b from Characteristic b where b.name=:name", [name:name])
        log.info("Exiting getCharacteristics")
        return characteristic
    }
}
@组件(“特性DAO”)
类CharacteristicDao扩展了GenericDao实现了ICharacteristicDao{
public def getCharacteristics(字符串名称){
log.info(“输入getCharacteristics”)
Characteristic=(PrmCharacteristic)executeQueryWithSingleResult(“从特性b中选择b,其中b.name=:name”,[name:name])
log.info(“正在退出getCharacteristics”)
返回特性
}
}
我使用CharacteristicDao组件与数据库交互。同样我也有其他刀。我刚才举了一个例子


我在事务中使用@Transactional。任何一个主机都可以帮我找出我做错了什么。

这似乎是一个网络级错误,这一点可以通过侦听器关闭来确认。如果您怀疑连接泄漏,请监视应用程序和数据库之间已建立的TCP连接计数,并查看其是否稳定增长。更准确地说,我如何检查这一点?
netstat-pant | grep ESTA | grep DB_port_number
netstat的参数可能因您的操作系统而异。将-c添加到grep以获取计数。此处没有“连接关闭”。阅读错误消息。存在连接创建问题。数据库服务器正在运行吗?您是否指定了正确的Ip:端口?是的,它的生产代码。我只是把配置放在这里。Spring正在注入EntityManager,它不会关闭这里的连接吗?这似乎是一个网络级错误,侦听器关闭后证实了这一点。如果您怀疑连接泄漏,请监视应用程序和数据库之间已建立的TCP连接计数,并查看其是否稳定增长。更准确地说,我如何检查这一点?
netstat-pant | grep ESTA | grep DB_port_number
netstat的参数可能因您的操作系统而异。将-c添加到grep以获取计数。此处没有“连接关闭”。阅读错误消息。存在连接创建问题。数据库服务器正在运行吗?您是否指定了正确的Ip:端口?是的,它的生产代码。我只是把配置放在这里。Spring正在注入EntityManager,它是否会关闭此处的连接?