2010-08-18 27 views
7

Estoy escribiendo una aplicación red5 usando Java y estoy usando el c3p0 para la interacción de la base de datos.java c3p0: ¿cómo puedo configurar autoreconnect = true?

Parece que después de la conexión como tiempo de espera agotado en mi servidor MySQL mi aplicación deja de funcionar con una sugerencia para configurar autoreconnect = true.

¿cómo puedo hacerlo?

Ésta es la función que utilizo para crear el origen de datos:

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; 
} 

Respuesta

6

Crear un archivo c3p0.properties que debe estar en la raíz de la ruta de clases:

# c3p0.properties 
c3p0.testConnectionOnCheckout=true 

Para más documentación se refieren a this.

This post puede ser útil también.

2

La autoreconexión de la propiedad no forma parte del objeto C3p0. Para usar un grupo C3P0, se recomienda configurar otras opciones (como testConnectionOnCheckout) y utilizar Factory.

Usted tiene toda la información C3p0 y muestras aquí http://www.mchange.com/projects/c3p0/index.html

Puede utilizar y presentar propiedades externas, o añadir por código: por ejemplo, cómo crear un origen de datos agrupado personalizado utilizando una fuente de datos y la adición de opciones de personalización (más muestras en la documentación C3p0 url)

// 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); 
+0

Sí! Mucho mejor. autoreconnect es oficialmente recomendado por MYSQL como fuerte - puede causar problemas de corrupción. Lo siento, no tengo el enlace, lo vi hace unos años. – MJB

Cuestiones relacionadas