Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 处理批量更新时C3po和oracle的锁定情况_Java_Oracle_C3p0 - Fatal编程技术网

Java 处理批量更新时C3po和oracle的锁定情况

Java 处理批量更新时C3po和oracle的锁定情况,java,oracle,c3p0,Java,Oracle,C3p0,有时我的线程卡在这个状态,我认为db连接上有一个锁,所以我如何解决这个锁;这种情况发生在一个唯一的约束错误然后进入一个对每个记录处理的逐个方法时 "scheduling-1" - Thread t@38 java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRea

有时我的线程卡在这个状态,我认为db连接上有一个锁,所以我如何解决这个锁;这种情况发生在一个唯一的约束错误然后进入一个对每个记录处理的逐个方法时

"scheduling-1" - Thread t@38
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at oracle.net.ns.Packet.receive(Packet.java:300)
        at oracle.net.ns.DataPacket.receive(DataPacket.java:106)
        at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:260)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:185)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:102)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
        at oracle.jdbc.driver.OraclePreparedStatement.executeForRowsWithTimeout(OraclePreparedStatement.java:10130)
        at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10249)
        - locked <7026a1d3> (a oracle.jdbc.driver.T4CConnection)
        at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)
        at org.springframework.jdbc.core.JdbcTemplate.lambda$batchUpdate$2(JdbcTemplate.java:950)
        at org.springframework.jdbc.core.JdbcTemplate$$Lambda$463/1248908034.doInPreparedStatement(Unknown Source)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:646)
        at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:936)
DB查询--

 @Override
   public void insertDeliver(List<SrmDeliver> srm) {
      logger.info("insertSrmDeliver - begin "+srm.size());

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


         @Override
         public void setValues(PreparedStatement ps, int i) throws SQLException {
            TimeStamp time = new TimeStamp();
            final Calendar date = time.setup(srm.get(i).receiveTime, dateFormat);
            Timestamp timestamp = new Timestamp(date.getTimeInMillis());

            ps.setInt(1, srm.get(i).nodeId);
            setInteger(ps, 2, ( srm.get(i)).service);
            ps.setString(3, ( srm.get(i)).client);
            ps.setString(4, ( srm.get(i)).reportId);
            setInteger(ps, 5, ( srm.get(i)).resultCode);
            ps.setTimestamp(6, timestamp);
         }

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

      logger.info("insertSrmDeliver - end "+srm.size());

在事务上发出回滚后,所有锁都应该消失。让我试试,我想它会工作的。是的,在添加事务注释后工作。有趣的一点是,当使用Welbogic数据源Jndi时,这段代码可以正常工作,不管怎样,永远是springboot:)在事务上发出回滚后,所有锁都应该消失。让我试试,我认为它可以工作是的,它在添加事务注释后工作。有趣的一点是,当使用Welbogic数据源Jndi时,这部分代码可以正常工作,不管怎样,永远是springboot:)
 @Override
   public void insertDeliver(List<SrmDeliver> srm) {
      logger.info("insertSrmDeliver - begin "+srm.size());

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


         @Override
         public void setValues(PreparedStatement ps, int i) throws SQLException {
            TimeStamp time = new TimeStamp();
            final Calendar date = time.setup(srm.get(i).receiveTime, dateFormat);
            Timestamp timestamp = new Timestamp(date.getTimeInMillis());

            ps.setInt(1, srm.get(i).nodeId);
            setInteger(ps, 2, ( srm.get(i)).service);
            ps.setString(3, ( srm.get(i)).client);
            ps.setString(4, ( srm.get(i)).reportId);
            setInteger(ps, 5, ( srm.get(i)).resultCode);
            ps.setTimestamp(6, timestamp);
         }

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

      logger.info("insertSrmDeliver - end "+srm.size());
   private boolean insertRows(List<T> chunkList, List<String> dbErrorList) {

      boolean retval = false;
      try {

         insertChunksToDb(chunkList);

         retval = true;

      } catch (Exception e) {
         logger.error(" DB Exception. Hash:" + this.hashCode(), e);
         insertOneByOne(chunkList, dbErrorList);
         return false;

      }

      return retval;
   }
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TIMS.SRM_DISP_PK) violated

        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
        at oracle.jdbc.driver.OraclePreparedStatement.executeForRowsWithTimeout(OraclePreparedStatement.java:10130)
        at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10249)
        at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)
        at org.springframework.jdbc.core.JdbcTemplate.lambda$batchUpdate$2(JdbcTemplate.java:950)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)