Я пишу приложение red5 с использованием Java и я использую c3p0 для взаимодействия с базой данных.
Кажется, что после истечения времени ожидания соединения на моем сервере MySQL мое приложение перестает работать с предложением настроить autoreconnect = true.
Как я могу это сделать?
Это функция, которую я использую для создания источника данных:
private ComboPooledDataSource _createDataSource() {
Properties props = new Properties();
// Looks for the file 'database.properties' in {TOMCAT_HOME}\webapps\{RED5_HOME}\WEB-INF\
try {
FileInputStream in = new FileInputStream(System.getProperty("red5.config_root") + "/database.properties");
props.load(in);
in.close();
} catch (IOException ex) {
log.error("message: {}", ex.getMessage());
log.error("stack trace: " + ExceptionUtils.getFullStackTrace(ex));
return null;
}
// It will load the driver String from properties
String drivers = props.getProperty("jdbc.drivers");
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
cpds.setDriverClass(drivers);
} catch (PropertyVetoException ex) {
log.error("message: {}", ex.getMessage());
log.error("stack trace: " + ExceptionUtils.getFullStackTrace(ex));
return null;
}
cpds.setJdbcUrl(url);
cpds.setUser(username);
cpds.setPassword(password);
cpds.setMaxStatements(180);
return cpds;
}
Создайте файл c3p0.properties
, который должен находиться в корне classpath:
# c3p0.properties
c3p0.testConnectionOnCheckout=true
Для дальнейшей документации обратитесь к этому.
Этот пост также может быть полезен.
Свойство autoreconnect не является частью объекта C3p0 Чтобы использовать пул C3P0, рекомендуется настроить другие параметры (например, testConnectionOnCheckout ) и использовать Factory.
Здесь вы найдете всю информацию и образцы C3p0 http://www.mchange.com/projects/c3p0/index.html
Вы можете использовать и файл внешних свойств или добавить его с помощью кода: например, как для создания настраиваемого источника данных в пуле с использованием источника данных и добавления настраиваемых параметров (больше примеров в URL-адресе документации C3p0)
// Your datasource fetched from the properties file
DataSource ds_unpooled = DataSources.unpooledDataSource("url", "user", "password");
// Custom properties to add to the Source
// See http://www.mchange.com/projects/c3p0/index.html#configuration_properties
Map overrides = new HashMap();
overrides.put("maxStatements", "200"); //Stringified property values work
overrides.put("maxPoolSize", new Integer(50)); //"boxed primitives" also work
// Your pooled datasource with all new properties
ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );