对于数据库连接超时问题,是一个经典问题,不外乎两种解决办法。一种是配置数据库本身的连接时长。一种是通过软件自身来解决。显然是第二种主法是最佳选择。对于MyBatis,经常使用的配置如下: 点击(此处)折叠或打开 environments default=product environment
点击(此处)折叠或打开
- <environments default="product">
- <environment id="development">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&" />
- <property name="username" value="root"/>
- <property name="password" value="zhiyisoft"/>
- </dataSource>
- </environment>
- <environment id="product">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/prometheus?useUnicode=true&characterEncoding=utf8" />
- <property name="username" value="root"/>
- <property name="password" value="zhiyisoft"/>
- </dataSource>
- </environment>
- </environments>
点击(此处)折叠或打开
- <property name="poolPingEnabled" value="true"/>
- <property name="poolPingQuery" value="select 10000 as salary"/>
- <property name="poolPingConnectionsNotUsedFor" value="14400000"/>
-
poolPingEnabled
- 是否开启连接状态检测功能
- poolPingQuery
- 检查连接状态的SQL语句
- 多久检查一次
- poolPingConnectionsNotUsedFor
POOLED这个DataSource别名实际上对应的是这个类:org.apache.ibatis.datasource.pooled.PooledDataSource
下面列出该类的属性声明:
点击(此处)折叠或打开
- private final PoolState state = new PoolState(this);
- private final UnpooledDataSource dataSource;
- // OPTIONAL CONFIGURATION FIELDS
- protected int poolMaximumActiveConnections = 10;
- protected int poolMaximumIdleConnections = 5;
- protected int poolMaximumCheckoutTime = 20000;
- protected int poolTimeToWait = 20000;
- protected String poolPingQuery = "NO PING QUERY SET";
- protected boolean poolPingEnabled = false;
- protected int poolPingConnectionsNotUsedFor = 0;
- private int expectedConnectionTypeCode;
set-variable=max_user_connections=300