龙空技术网

一次OceanBase数据库 Connection reset

EnvDev 113

前言:

此时你们对“mysql1903”大体比较珍视,兄弟们都需要学习一些“mysql1903”的相关资讯。那么小编在网上收集了一些关于“mysql1903””的相关资讯,希望小伙伴们能喜欢,大家一起来学习一下吧!

基础环境 1.数据库连接池1.1.16

2.mysql驱动版本号5.1.47

3.数据库dao操作spring+mybatis

4.数据库mysql软件基础框架

其中APP的数据库连接池使用druid,druid的配置后文体现,配置了空闲连接池的探测,1分钟进行一次数据空闲连接销毁,keepAlive的探测时间默认为2分钟。SLB到dbproxy的默认探测时间是15分钟,dbproxy的探测时间是12分钟。业务代码 public class CheckBatchStatus implements Tasklet {

private static final Logger logger = LoggerFactory.getLogger(CheckBatchStatus.class);

@Autowired

private AccessRepository accessRepository;

@Override

public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {

boolean runing = true;

int count = 0;

String status = null;

while (runing && count < 30) {

long counts = accessRepository.count();

logger.info("{}", counts);

}

return RepeatStatus.FINISHED;

}

}使用了springbatch的Tasklet任务类,出错就在其中的while循环。出错现象Caused by: java.sql.SQLException: Server connection execute error: Connection reset

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1242)

at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)

at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3409)

at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)

at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3407)

at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)

at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3407)

at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)druid的主要配置信息 <property name="initialSize" value="5"/>

<property name="maxActive" value="200"/>

<property name="minIdle" value="5"/>

<property name="validationQuery" value="SELECT 1"/>

<property name="testOnBorrow" value="false"/>

<property name="testOnReturn" value="false"/>

<property name="testWhileIdle" value="true"/>

<property name="testWhileIdle" value="true"/>打开druid的监控显示,数据库连接keepAliveCount的次数每隔两分钟增加5,由此可见数据库连接探测的生效。原因分析 //springbatch的Tasklet开启事务,导致后续的数据库连接的connection对象都是一个

TransactionStatus status = this.transactionManager.getTransaction(this);

T result;

try {

result = action.doInTransaction(status);

}

catch (RuntimeException | Error ex) {

// Transactional code threw application exception -> rollback

rollbackOnException(status, ex);

throw ex;

}

标签: #mysql1903