Estoy usando la biblioteca de grupo de conexiones Apache Tomcat JDBC en mi proyecto y configuré el archivo context.xml en consecuencia. La instancia de mi aplicación debe ejecutarse en varias ubicaciones, pero la carga en la aplicación será diferente, por lo que quiero modificar el tamaño maxActive y alguna otra propiedad según el tamaño del cliente en una instancia particular en tiempo de ejecución.
<Context path="/abc" docBase="abc" debug="5" reloadable="false" crossContext="true"> <Resource name="jdbc/abc" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="xxxxx" url="xxxxxxx" username="xxxxx" password="xxxxxx" maxActive="20" initialSize="0" ... /> </Context>No hay nada especial en una fuente de datos creada a través de JNDI: si conoce su clase ( org.apache.tomcat.jdbc.pool.DataSource en su caso), puede convertir a esa clase y usar los configuradores disponibles para configurarlo:
private void customizeDataSource(final DataSource ds) { if (ds instanceof PoolConfiguration) { final PoolConfiguration poolConfig = (PoolConfiguration) ds; poolConfig.setMaxActive(10); } } (ver la definición de PoolConfiguration ). Las implementaciones de javax.sql.DataSource también implementan una interfaz Wrapper muy útil, que puede ser útil si su código envuelve la fuente de datos JDBC de Tomcat en otra cosa:
private void customizeDataSource(final DataSource ds) throws SQLException { if (ds.isWrapperFor(PoolConfiguration.class)) { final PoolConfiguration poolConfig = ds.unwrap(PoolConfiguration.class); poolConfig.setMaxActive(10); } }Sin embargo, existen algunos problemas que pueden surgir del enfoque programático anterior:
tomcat-jdbc.jar con su aplicación, su código solo reconocerá los recursos JNDI configurados en su context.xml . Aquellos en GlobalNamingResources usarán la copia de org.apache.tomcat.jdbc.pool.DataSource incluido con Tomcat y no coincidirán con la condición de instanceof de.tomcat-jdbc.jar en su archivo WAR, debe asegurarse de que los parámetros que establezca sean compatibles con todas las versiones de Tomcat en las que se ejecutará su aplicación.MySQL se conecta rápidamente, lo que hace que la agrupación de conexiones sea de uso limitado.
Por lo general, si hay un problema de rendimiento, es mejor manejarlo con otras técnicas: índices compuestos, reformulación de consultas, solución de las limitaciones de optimización de MySQL, etc.
¿Le importaría retroceder un paso y analicemos los cuellos de botella?