Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 Spring数据库连接未关闭_Java_Spring - Fatal编程技术网

Java Spring数据库连接未关闭

Java Spring数据库连接未关闭,java,spring,Java,Spring,我使用SPRINGBatchPreparedStatementSetter对象在1个表中批量插入记录 完成后,它将在另一个表中执行批处理更新 根据记录的数量,此过程会重复多次 现在,我遇到的问题是,在修复之后,并没有迭代,数据库连接并没有获得,系统只是挂起,因为Spring并没有返回任何输出 分析后,发现系统达到了连接的最大允许极限,这是完全有效的,但我认为Spring framework应该在每次CRUD操作后负责连接释放过程 是否仍然存在处理此连接池问题的方法。我使用apachebasicd

我使用SPRING
BatchPreparedStatementSetter
对象在1个表中批量插入记录

完成后,它将在另一个表中执行批处理更新

根据记录的数量,此过程会重复多次

现在,我遇到的问题是,在修复之后,并没有迭代,数据库连接并没有获得,系统只是挂起,因为Spring并没有返回任何输出

分析后,发现系统达到了连接的最大允许极限,这是完全有效的,但我认为Spring framework应该在每次CRUD操作后负责连接释放过程

是否仍然存在处理此连接池问题的方法。我使用apachebasicdatasource作为
数据源
对象

提前感谢。

代码详细信息如下-
    Code detail is something like this -

    Service class -

public class ServiceImpl {
----
    if (list.size() == 1000) {
           daoInstance.storeRecordsinDB(list);
           daoInstance.updateRecordsInDB(list2);
    }
-----
   }
    Another class DaoInstance -

    public class DaoInstance extends JdbcTemplate {

    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate =jdbcTemplate;
    }

    public void storeRecords(List<dtoObj> valueList) {

           getJdbcTemplate().batchUpdate(insertSql, new BatchPreparedStatementSetter() {

                @Override
                public void setValues(PreparedStatement ps, int i) throws SQLException {


                     dtoObj dto = valueList.get(i);             
                     ps.setLong(1, dto.getId());
                     ps.setString(2, dto.getName();


                }

                @Override
                public int getBatchSize() {
                    return valueList.size();                    
                }
            }) ;
    }


    public void updateRecordsInDB(final List<Long> idList)  {


            try {

                getJdbcTemplate().batchUpdate(updateSQL, new BatchPreparedStatementSetter() {

                    @Override
                    public void setValues(PreparedStatement ps, int i) throws SQLException {
                                              long id = idList.get(i)
                        ps.setLong(1, id);
                    }

                    @Override
                    public int getBatchSize() {
                        if (idList != null ) {
                            return idList.size();
                        }else {
                            return 0;
                        }
                    }
                });
            }

Implemented transaction management on service class in Spring xml file as -

<tx:advice id = "txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" read-only="false"/>
            <!-- <tx:method name="*" read-only="true"/> -->
        </tx:attributes>
    </tx:advice>

    <aop:config>
    <aop:pointcut expression="execution(* com.package.serviceImpl.process*(..))" id="accuracyOperation"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="accuracyOperation"/>
    </aop:config>
服务等级- 公共类ServiceImpl{ ---- 如果(list.size()==1000){ daoInstance.storeRecordsinDB(列表); daoInstance.updateRecordsInDB(列表2); } ----- } 另一个类实例- 公共类实例扩展JdbcTemplate{ 私有JdbcTemplate JdbcTemplate; 公共void setJdbcTemplate(JdbcTemplate JdbcTemplate){ this.jdbcTemplate=jdbcTemplate; } 公共记录(列表值列表){ getJdbcTemplate().batchUpdate(插入SQL,新的BatchPreparedStatementSetter()){ @凌驾 公共void setValues(PreparedStatement ps,int i)引发SQLException{ dtoObj dto=valueList.get(i); ps.setLong(1,dto.getId()); ps.setString(2,dto.getName(); } @凌驾 public int getBatchSize(){ 返回valueList.size(); } }) ; } public void updateRecordsInDB(最终列表idList){ 试一试{ getJdbcTemplate().batchUpdate(updateSQL,新的BatchPreparedStatementSetter()){ @凌驾 公共void setValues(PreparedStatement ps,int i)引发SQLException{ long id=idList.get(i) ps.setLong(1,id); } @凌驾 public int getBatchSize(){ if(idList!=null){ 返回idList.size(); }否则{ 返回0; } } }); } 在SpringXML文件中实现服务类的事务管理-
通过在代码中实现事务管理,解决了这一问题


另一个主要问题是,在其中一个select子句中,连接没有关闭。因此,通过显式调用连接对象上的close方法,连接正在关闭,因此系统没有通过max connection LIMIT。

您可以共享一些源代码吗?发布使用springWh进行批插入的方法实现您是否将代码作为答案发布???您需要使用此代码编辑您的答案。