@Test
public void createTable(){
//创建核心工作了引擎的配置对象
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//设置连接数据库的参数
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activitidemo");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("123456");
/*
public static final String DB_SCHEMA_UPDATE_FALSE = "false";表不存在不会自动创建表
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";删除已有的表再创建
public static final String DB_SCHEMA_UPDATE_TRUE = "true";表不存在会自动创建表
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//获得工作流引擎
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine:"+processEngine);
}
报错主体:The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
一、有人说因为mysql回收空闲连接的时间变长,mysql默认回收时间是8小时,所以可以在mysql目录下的my.ini中增加下面配置:
[mysqld]
wait_timeout=86400
二、还有人说在数据库连接的Url后面添加 &autoReconnect=true&failOverReadOnly=false&maxReconnects=10
很遗憾的是,我两种都试过了,没作用。于是,我就去看那个ProcessEngineConfiguration的底层代码。被我发现了jdbcPingEnabled这个变量。于是答案就出来了。
添加以下代码:
processEngineConfiguration.setJdbcMaxActiveConnections(200);//最大连接数
processEngineConfiguration.setJdbcMaxIdleConnections(20);//最大空闲连接数
processEngineConfiguration.setJdbcMaxCheckoutTime(20000);//连接检查时间
processEngineConfiguration.setJdbcPingEnabled(true);//连接无用后,是否主动连接
processEngineConfiguration.setJdbcPingConnectionNotUsedFor(3600*1000);//连接无用检查并连接间隔,单位毫秒
processEngineConfiguration.setJobExecutorActivate(false);
然后问题就解决了。不需要修改ini文件。也不需要Url添加后缀。
在网上的信息很难找,我也是找了很久才找到相关的解决方案,在这里记录一下,如果大家以后和我碰到相同的错误,还有得参考。文章内容部分转载自flyflyflyflyflyfly