Rápido, sencillo, fiable. HikariCP es un grupo de conexiones JDBC listo para producción "sin gastos generales". Con aproximadamente 165 Kb, la biblioteca es muy liviana. Lea sobre cómo lo hacemos aquí.
"La simplicidad es un requisito previo para la confiabilidad."
- Dr. Edsger Dijkstra
Importante
Para evitar una condición poco común en la que el grupo llega a cero y no se recupera, es necesario configurar TCP keepalive . Algunos controladores JDBC admiten esto a través de propiedades, por ejemplo tcpKeepAlive=true
en PostgreSQL, pero en cualquier caso también se puede configurar a nivel del sistema operativo. Consulte Configuración de OS TCP Keepalive y/o TCP keepalive para obtener una mejor experiencia con PostgreSQL.
Artefacto maven de Java 11+ :
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >6.2.1</ version >
</ dependency >
Artefacto Java 8 maven ( modo de mantenimiento ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >4.0.3</ version >
</ dependency >
Artefacto Java 7 maven ( modo de mantenimiento ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java7</ artifactId >
< version >2.4.13</ version >
</ dependency >
Artefacto Java 6 maven ( modo de mantenimiento ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java6</ artifactId >
< version >2.3.13</ version >
</ dependency >
O descargar desde aquí.
Se crearon microbenchmarks para aislar y medir la sobrecarga de los grupos utilizando el marco de microbenchmark de JMH. Puede consultar el proyecto de referencia de HikariCP para obtener más detalles y revisar/ejecutar las pruebas usted mismo.
DataSource.getConnection()
/ Connection.close()
único.Connection.prepareStatement()
, Statement.execute()
, Statement.close()
.Análisis de HikariCP v2.6, en comparación con otros pools, en relación con una carga única de "demanda máxima".
El entorno del cliente imponía un alto costo de adquisición de nuevas conexiones y el requisito de un grupo de tamaño dinámico, pero aún así una necesidad de capacidad de respuesta ante los picos de solicitudes. Lea sobre el manejo del pico de demanda aquí.
También conocido como "Lo que probablemente no sabía sobre el tamaño del grupo de conexiones" . Mire un vídeo del grupo Oracle Real-world Performance y aprenda por qué las conexiones de bases de datos no necesitan ser tan numerosas como suelen ser. De hecho, demasiadas conexiones tienen un impacto negativo claro y demostrable en el desempeño; una diferencia de 50 veces en el caso de la demostración de Oracle. Sigue leyendo para descubrirlo.
Nos gustaría agradecer a los chicos de WIX por el artículo profundo y no solicitado sobre HikariCP en su blog de ingeniería. Échale un vistazo si tienes tiempo.
Lea nuestro interesante desafío de grupo "Base de datos inactiva".
El software de código abierto como HikariCP, como cualquier producto, compite en el mercado libre. Lo entendemos. Entendemos que los avances de productos, una vez públicos, a menudo son cooptados. Y entendemos que las ideas pueden surgir del espíritu de la época; simultánea e independientemente. Pero el cronograma de la innovación, particularmente en proyectos de código abierto, también es claro y queremos que nuestros usuarios comprendan la dirección del flujo de innovación en nuestro espacio. Podría ser desmoralizador ver que el resultado de cientos de horas de pensamiento e investigación se apropia tan fácilmente, y tal vez eso sea inherente a un mercado libre, pero no estamos desmoralizados. Estamos motivados; para ampliar la brecha.
HikariCP viene con valores predeterminados sensatos que funcionan bien en la mayoría de las implementaciones sin ajustes adicionales. Cada propiedad es opcional, excepto los "esenciales" marcados a continuación.
? HikariCP usa milisegundos para todos los valores de tiempo.
HikariCP se basa en temporizadores precisos tanto para el rendimiento como para la confiabilidad. Es imperativo que su servidor esté sincronizado con una fuente de tiempo, como un servidor NTP. Especialmente si su servidor se ejecuta dentro de una máquina virtual. ¿Por qué? Lea más aquí. No confíe en la configuración del hipervisor para "sincronizar" el reloj de la máquina virtual. Configure la sincronización de fuente de tiempo dentro de la máquina virtual. Si vienes pidiendo ayuda sobre un problema que resulta ser causado por una falta de sincronización horaria, recibirás burlas públicamente en Twitter.
? dataSourceClassName
Este es el nombre de la clase DataSource
proporcionada por el controlador JDBC. Consulte la documentación de su controlador JDBC específico para obtener este nombre de clase o consulte la siguiente tabla. Nota Las fuentes de datos XA no son compatibles. XA requiere un administrador de transacciones real como bitronix. Tenga en cuenta que no necesita esta propiedad si está utilizando jdbcUrl
para la configuración del controlador JDBC basada en DriverManager de la "vieja escuela". Predeterminado: ninguno
- o -
? jdbcUrl
Esta propiedad indica a HikariCP que utilice la configuración "basada en DriverManager". Creemos que la configuración basada en DataSource (arriba) es superior por una variedad de razones (ver a continuación), pero para muchas implementaciones hay poca diferencia significativa. Cuando utilice esta propiedad con controladores "antiguos", es posible que también necesite configurar la propiedad driverClassName
, pero inténtelo primero sin ella. Tenga en cuenta que si se utiliza esta propiedad, aún puede usar las propiedades de DataSource para configurar su controlador y, de hecho, se recomienda sobre los parámetros del controlador especificados en la propia URL. Predeterminado: ninguno
? username
Esta propiedad establece el nombre de usuario de autenticación predeterminado utilizado al obtener conexiones del controlador subyacente. Tenga en cuenta que para DataSources esto funciona de una manera muy determinista llamando DataSource.getConnection(*username*, password)
en el DataSource subyacente. Sin embargo, para las configuraciones basadas en controladores, cada controlador es diferente. En el caso de basado en controlador, HikariCP usará esta propiedad username
para establecer una propiedad user
en las Properties
pasadas a la llamada DriverManager.getConnection(jdbcUrl, props)
del controlador. Si esto no es lo que necesita, omita este método por completo y llame addDataSourceProperty("username", ...)
, por ejemplo. Predeterminado: ninguno
? password
Esta propiedad establece la contraseña de autenticación predeterminada utilizada al obtener conexiones del controlador subyacente. Tenga en cuenta que para DataSources esto funciona de una manera muy determinista llamando DataSource.getConnection(username, *password*)
en el DataSource subyacente. Sin embargo, para las configuraciones basadas en controladores, cada controlador es diferente. En el caso de basado en controlador, HikariCP usará esta propiedad password
para establecer una propiedad password
en las Properties
pasadas a la llamada DriverManager.getConnection(jdbcUrl, props)
del controlador. Si esto no es lo que necesita, omita este método por completo y llame addDataSourceProperty("pass", ...)
, por ejemplo. Predeterminado: ninguno
✅ autoCommit
Esta propiedad controla el comportamiento de confirmación automática predeterminado de las conexiones devueltas por el grupo. Es un valor booleano. Predeterminado: verdadero
⏳ connectionTimeout
Esta propiedad controla la cantidad máxima de milisegundos que un cliente (es decir, usted) esperará una conexión del grupo. Si se excede este tiempo sin que haya una conexión disponible, se generará una excepción SQLException. El tiempo de espera de conexión mínimo aceptable es de 250 ms. Predeterminado: 30000 (30 segundos)
⏳ idleTimeout
Esta propiedad controla la cantidad máxima de tiempo que una conexión puede permanecer inactiva en el grupo. Esta configuración solo se aplica cuando se define que minimumIdle
es menor que maximumPoolSize
. Las conexiones inactivas no se retirarán una vez que el grupo alcance minimumIdle
conexiones inactivas. El hecho de que una conexión se retire como inactiva o no está sujeto a una variación máxima de +30 segundos y una variación promedio de +15 segundos. Una conexión nunca se retirará por inactiva antes de este tiempo de espera. Un valor de 0 significa que las conexiones inactivas nunca se eliminan del grupo. El valor mínimo permitido es 10000 ms (10 segundos). Predeterminado: 600000 (10 minutos)
⏳ hora keepaliveTime
Esta propiedad controla la frecuencia con la que HikariCP intentará mantener activa una conexión para evitar que la base de datos o la infraestructura de red agoten el tiempo de espera. Este valor debe ser menor que el valor de maxLifetime
. Un "keepalive" sólo ocurrirá en una conexión inactiva. Cuando llegue el momento de "mantener activo" en una conexión determinada, esa conexión se eliminará del grupo, se hará "ping" y luego se devolverá al grupo. El 'ping' es uno de los siguientes: invocación del método JDBC4 isValid()
o ejecución de la connectionTestQuery
. Normalmente, la duración fuera del grupo debe medirse en milisegundos de un solo dígito o incluso en submilisegundos y, por lo tanto, debería tener poco o ningún impacto notable en el rendimiento. El valor mínimo permitido es 30000 ms (30 segundos), pero lo más deseable es un valor en el rango de minutos. Predeterminado: 120000 (2 minutos)
⏳ maxLifetime
Esta propiedad controla la vida útil máxima de una conexión en el grupo. Una conexión en uso nunca se retirará, solo cuando se cierre se eliminará. Conexión por conexión, se aplica una atenuación negativa menor para evitar la extinción masiva en la piscina. Recomendamos encarecidamente establecer este valor, que debe ser varios segundos más corto que el límite de tiempo de conexión impuesto por cualquier base de datos o infraestructura. Un valor de 0 indica que no hay una vida útil máxima (vida útil infinita), sujeto, por supuesto, a la configuración idleTimeout
. El valor mínimo permitido es 30000 ms (30 segundos). Predeterminado: 1800000 (30 minutos)
? connectionTestQuery
Si su controlador es compatible con JDBC4, le recomendamos encarecidamente no configurar esta propiedad. Esto es para controladores "heredados" que no son compatibles con la Connection.isValid() API
. Esta es la consulta que se ejecutará justo antes de que se le proporcione una conexión desde el grupo para validar que la conexión a la base de datos aún está activa. Nuevamente, intente ejecutar el grupo sin esta propiedad, HikariCP registrará un error si su controlador no es compatible con JDBC4 para informarle. Predeterminado: ninguno
? minimumIdle
Esta propiedad controla la cantidad mínima de conexiones inactivas que HikariCP intenta mantener en el grupo. Si las conexiones inactivas caen por debajo de este valor y el total de conexiones en el grupo es menor que maximumPoolSize
, HikariCP hará todo lo posible para agregar conexiones adicionales de manera rápida y eficiente. Sin embargo, para obtener el máximo rendimiento y capacidad de respuesta ante picos de demanda, recomendamos no establecer este valor y, en su lugar, permitir que HikariCP actúe como un grupo de conexiones de tamaño fijo . Valor predeterminado: igual que el tamaño máximo de grupo
? maximumPoolSize
Esta propiedad controla el tamaño máximo que puede alcanzar el grupo, incluidas las conexiones inactivas y en uso. Básicamente, este valor determinará el número máximo de conexiones reales al backend de la base de datos. Un valor razonable para esto lo determina mejor su entorno de ejecución. Cuando el grupo alcanza este tamaño y no hay conexiones inactivas disponibles, las llamadas a getConnection() se bloquearán durante un máximo de milisegundos connectionTimeout
antes de que se agote el tiempo de espera. Lea sobre el tamaño de la piscina. Predeterminado: 10
? metricRegistry
Esta propiedad solo está disponible mediante configuración programática o contenedor IoC. Esta propiedad le permite especificar una instancia de Codahale/Dropwizard MetricRegistry
para que el grupo la utilice para registrar varias métricas. Consulte la página wiki de Métricas para obtener más detalles. Predeterminado: ninguno
? healthCheckRegistry
Esta propiedad solo está disponible mediante configuración programática o contenedor IoC. Esta propiedad le permite especificar una instancia de Codahale/Dropwizard HealthCheckRegistry
que el grupo utilizará para informar información de salud actual. Consulte la página wiki de Health Checks para obtener más detalles. Predeterminado: ninguno
? poolName
Esta propiedad representa un nombre definido por el usuario para el grupo de conexiones y aparece principalmente en las consolas de administración JMX y de registro para identificar grupos y configuraciones de grupos. Valor predeterminado: generado automáticamente
⏳ initializationFailTimeout
Esta propiedad controla si el grupo "fallará rápidamente" si no se puede inicializar correctamente con una conexión inicial. Cualquier número positivo se considera el número de milisegundos para intentar adquirir una conexión inicial; El hilo de la aplicación se bloqueará durante este período. Si no se puede adquirir una conexión antes de que se agote el tiempo de espera, se generará una excepción. Este tiempo de espera se aplica después del período de connectionTimeout
. Si el valor es cero (0), HikariCP intentará obtener y validar una conexión. Si se obtiene una conexión, pero falla la validación, se generará una excepción y el grupo no se iniciará. Sin embargo, si no se puede obtener una conexión, el grupo se iniciará, pero los esfuerzos posteriores para obtener una conexión pueden fallar. Un valor inferior a cero omitirá cualquier intento de conexión inicial y el grupo se iniciará inmediatamente mientras intenta obtener conexiones en segundo plano. En consecuencia, los esfuerzos posteriores por obtener una conexión pueden fracasar. Predeterminado: 1
❎ isolateInternalQueries
Esta propiedad determina si HikariCP aísla las consultas del grupo interno, como la prueba de conexión activa, en su propia transacción. Dado que normalmente son consultas de solo lectura, rara vez es necesario encapsularlas en su propia transacción. Esta propiedad solo se aplica si autoCommit
está deshabilitada. Predeterminado: falso
❎ allowPoolSuspension
Esta propiedad controla si el grupo se puede suspender y reanudar a través de JMX. Esto es útil para ciertos escenarios de automatización de conmutación por error. Cuando se suspende el grupo, las llamadas a getConnection()
no expirarán y se retendrán hasta que se reanude el grupo. Predeterminado: falso
❎ readOnly
Esta propiedad controla si las conexiones obtenidas del grupo están en modo de solo lectura de forma predeterminada. Tenga en cuenta que algunas bases de datos no admiten el concepto de modo de solo lectura, mientras que otras brindan optimizaciones de consultas cuando la conexión está configurada en modo de solo lectura. Si necesita esta propiedad o no dependerá en gran medida de su aplicación y base de datos. Predeterminado: falso
❎ registerMbeans
Esta propiedad controla si los JMX Management Beans ("MBeans") están registrados o no. Predeterminado: falso
? catalog
Esta propiedad establece el catálogo predeterminado para las bases de datos que admiten el concepto de catálogos. Si no se especifica esta propiedad, se utiliza el catálogo predeterminado definido por el controlador JDBC. Predeterminado: controlador predeterminado
? connectionInitSql
Esta propiedad establece una declaración SQL que se ejecutará después de cada creación de una nueva conexión antes de agregarla al grupo. Si este SQL no es válido o genera una excepción, se tratará como un error de conexión y se seguirá la lógica de reintento estándar. Predeterminado: ninguno
? driverClassName
HikariCP intentará resolver un controlador a través de DriverManager basándose únicamente en jdbcUrl
, pero para algunos controladores más antiguos también se debe especificar driverClassName
. Omita esta propiedad a menos que reciba un mensaje de error obvio que indique que no se encontró el controlador. Predeterminado: ninguno
? transactionIsolation
Esta propiedad controla el nivel de aislamiento de transacciones predeterminado de las conexiones devueltas por el grupo. Si no se especifica esta propiedad, se utiliza el nivel de aislamiento de transacciones predeterminado definido por el controlador JDBC. Utilice esta propiedad únicamente si tiene requisitos de aislamiento específicos que sean comunes para todas las consultas. El valor de esta propiedad es el nombre constante de la clase Connection
, como TRANSACTION_READ_COMMITTED
, TRANSACTION_REPEATABLE_READ
, etc. Predeterminado: controlador predeterminado
⏳ validationTimeout
Esta propiedad controla la cantidad máxima de tiempo que se probará la vitalidad de una conexión. Este valor debe ser menor que el connectionTimeout
. El tiempo de espera de validación más bajo aceptable es de 250 ms. Predeterminado: 5000
⏳ leakDetectionThreshold
Esta propiedad controla la cantidad de tiempo que una conexión puede estar fuera del grupo antes de que se registre un mensaje que indique una posible pérdida de conexión. Un valor de 0 significa que la detección de fugas está desactivada. El valor más bajo aceptable para permitir la detección de fugas es 2000 (2 segundos). Predeterminado: 0
➡ dataSource
Esta propiedad solo está disponible mediante configuración programática o contenedor IoC. Esta propiedad le permite configurar directamente la instancia de DataSource
para que sea empaquetada por el grupo, en lugar de que HikariCP la construya mediante reflexión. Esto puede resultar útil en algunos marcos de inyección de dependencia. Cuando se especifica esta propiedad, se ignorarán la propiedad dataSourceClassName
y todas las propiedades específicas de DataSource. Predeterminado: ninguno
? schema
Esta propiedad establece el esquema predeterminado para las bases de datos que admiten el concepto de esquemas. Si no se especifica esta propiedad, se utiliza el esquema predeterminado definido por el controlador JDBC. Predeterminado: controlador predeterminado
➡ threadFactory
Esta propiedad solo está disponible mediante configuración programática o contenedor IoC. Esta propiedad le permite configurar la instancia de java.util.concurrent.ThreadFactory
que se usará para crear todos los subprocesos utilizados por el grupo. Es necesario en algunos entornos de ejecución restringidos donde los subprocesos solo se pueden crear a través de ThreadFactory
proporcionado por el contenedor de la aplicación. Predeterminado: ninguno
➡ scheduledExecutor
Esta propiedad solo está disponible mediante configuración programática o contenedor IoC. Esta propiedad le permite configurar la instancia de java.util.concurrent.ScheduledExecutorService
que se utilizará para diversas tareas programadas internamente. Si se proporciona a HikariCP una instancia de ScheduledThreadPoolExecutor
, se recomienda utilizar setRemoveOnCancelPolicy(true)
. Predeterminado: ninguno
➡ exceptionOverride
Esta propiedad solo está disponible mediante configuración programática o contenedor IoC. Esta propiedad le permite establecer una instancia de una clase, implementando la interfaz com.zaxxer.hikari.SQLExceptionOverride
, que se llamará antes de que una conexión sea expulsada del grupo debido a condiciones de excepción específicas. Normalmente, cuando se lanza una SQLException
, las conexiones se expulsan del grupo cuando están presentes SQLStates o ErrorCodes específicos. Se llamará al método adjudicate()
en la instancia SQLExceptionOverride
, que puede devolver uno de: Override.CONTINUE_EVICT
. Override.DO_NOT_EVICT
o Override.MUST_EVICT
. Excepto en casos muy específicos, se debe devolver Override.CONTINUE_EVICT
, lo que permite que se ejecute la lógica predeterminada de desalojo/no desalojo. Predeterminado: ninguno
? exceptionOverrideClassName
Esta propiedad le permite especificar el nombre de una clase proporcionada por el usuario que implementa la interfaz com.zaxxer.hikari.SQLExceptionOverride
. El grupo creará una instancia de la clase para adjudicar los desalojos de conexión. Consulte la propiedad exceptionOverride
anterior para obtener una descripción completa. Predeterminado: ninguno
HikariCP tiene muchas "perillas" para girar, como puede ver arriba, pero comparativamente menos que otros grupos. Esta es una filosofía de diseño. La estética del diseño de HikariCP es el minimalismo. De acuerdo con la filosofía de diseño simple es mejor o menos es más , algunos ejes de configuración se omiten intencionalmente.
Muchos grupos de conexiones, incluidos Apache DBCP, Vibur, c3p0 y otros, ofrecen almacenamiento en caché PreparedStatement
. HikariCP no lo hace. ¿Por qué?
En la capa del grupo de conexiones, PreparedStatements
sólo se pueden almacenar en caché por conexión . Si su aplicación tiene 250 consultas ejecutadas comúnmente y un grupo de 20 conexiones, le está pidiendo a su base de datos que conserve 5000 planes de ejecución de consultas y, de manera similar, el grupo debe almacenar en caché tantas PreparedStatements
y su gráfico de objetos relacionado.
La mayoría de los controladores JDBC de bases de datos importantes ya tienen un caché de declaraciones que se puede configurar, incluidos PostgreSQL, Oracle, Derby, MySQL, DB2 y muchos otros. Los controladores JDBC se encuentran en una posición única para explotar características específicas de la base de datos y casi todas las implementaciones de almacenamiento en caché son capaces de compartir planes de ejecución entre conexiones . Esto significa que en lugar de 5000 declaraciones en la memoria y planes de ejecución asociados, sus 250 consultas comúnmente ejecutadas dan como resultado exactamente 250 planes de ejecución en la base de datos. Las implementaciones inteligentes ni siquiera retienen los objetos PreparedStatement
en la memoria a nivel del controlador, sino que simplemente adjuntan nuevas instancias a los ID del plan existente.
El uso de un caché de declaraciones en la capa de agrupación es un antipatrón y afectará negativamente el rendimiento de su aplicación en comparación con los cachés proporcionados por el controlador.
Al igual que el almacenamiento en caché de declaraciones, la mayoría de los principales proveedores de bases de datos admiten el registro de declaraciones a través de las propiedades de su propio controlador. Esto incluye Oracle, MySQL, Derby, MSSQL y otros. Algunos incluso admiten el registro lento de consultas. Para aquellas pocas bases de datos que no lo admiten, hay varias opciones disponibles. Recibimos un informe de que p6spy funciona bien y también observamos la disponibilidad de log4jdbc y jdbcdslog-exp.
Lea la Guía de recuperación rápida para obtener detalles sobre cómo configurar su controlador y sistema para una recuperación adecuada tras el reinicio de la base de datos y los eventos de partición de red.
Puedes usar la clase HikariConfig
así 1 :
HikariConfig config = new HikariConfig ();
config . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
config . setUsername ( "bart" );
config . setPassword ( "51mp50n" );
config . addDataSourceProperty ( "cachePrepStmts" , "true" );
config . addDataSourceProperty ( "prepStmtCacheSize" , "250" );
config . addDataSourceProperty ( "prepStmtCacheSqlLimit" , "2048" );
HikariDataSource ds = new HikariDataSource ( config );
1 ejemplo específico de MySQL, NO COPIAR VERBATIM.
o crear una instancia directamente de un HikariDataSource
así:
HikariDataSource ds = new HikariDataSource ();
ds . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
ds . setUsername ( "bart" );
ds . setPassword ( "51mp50n" );
...
o archivo de propiedad basado en:
// Examines both filesystem and classpath for .properties file
HikariConfig config = new HikariConfig ( "/some/path/hikari.properties" );
HikariDataSource ds = new HikariDataSource ( config );
Archivo de propiedades de ejemplo:
dataSourceClassName =org.postgresql.ds.PGSimpleDataSource
dataSource.user =test
dataSource.password =test
dataSource.databaseName =mydb
dataSource.portNumber =5432
dataSource.serverName =localhost
o java.util.Properties
basado en:
Properties props = new Properties ();
props . setProperty ( "dataSourceClassName" , "org.postgresql.ds.PGSimpleDataSource" );
props . setProperty ( "dataSource.user" , "test" );
props . setProperty ( "dataSource.password" , "test" );
props . setProperty ( "dataSource.databaseName" , "mydb" );
props . put ( "dataSource.logWriter" , new PrintWriter ( System . out ));
HikariConfig config = new HikariConfig ( props );
HikariDataSource ds = new HikariDataSource ( config );
También hay una propiedad del sistema disponible, hikaricp.configurationFile
, que se puede utilizar para especificar la ubicación de un archivo de propiedades. Si tiene la intención de utilizar esta opción, construya una instancia de HikariConfig
o HikariDataSource
utilizando el constructor predeterminado y se cargará el archivo de propiedades.
Consejos de rendimiento de MySQL
Recomendamos usar dataSourceClassName
en lugar de jdbcUrl
, pero cualquiera de los dos es aceptable. Lo diremos nuevamente: cualquiera de los dos es aceptable .
Nota: Los usuarios de configuración automática de Spring Boot deben utilizar la configuración basada en jdbcUrl
.
Se sabe que MySQL DataSource no funciona con respecto al soporte de tiempo de espera de la red. Utilice la configuración jdbcUrl
en su lugar.
Aquí hay una lista de clases JDBC DataSource para bases de datos populares:
Base de datos | Conductor | Clase de fuente de datos |
---|---|---|
derbi apache | derby | org.apache.derby.jdbc.ClientDataSource |
pájaro de fuego | jaybird | org.firebirdsql.ds.FBSimpleDataSource |
llave inglesa | Llave | com.google.cloud.spanner.jdbc.JdbcDriver |
H2 | H2 | org.h2.jdbcx.JdbcDataSource |
HSQLDB | HSQLDB | org.hsqldb.jdbc.JDBCDataSource |
DB2 | CCJ de IBM | com.ibm.db2.jcc.DB2SimpleDataSource |
IBM Informax | IBM Informax | com.informix.jdbcx.IfxDataSource |
Servidor MS SQL | microsoft | com.microsoft.sqlserver.jdbc.SQLServerDataSource |
Conector/J | ||
mariadb | mariadb | org.mariadb.jdbc.MariaDbDataSource |
Oráculo | Oráculo | oracle.jdbc.pool.OracleDataSource |
OrientDB | OrientDB | com.orientechnologies.orient.jdbc.OrientDataSource |
PostgreSQL | pgjdbc-ng | com.impossibl.postgres.jdbc.PGDataSource |
PostgreSQL | PostgreSQL | org.postgresql.ds.PGSimpleDataSource |
SAPMaxDB | SAVIA | com.sap.dbtech.jdbc.DriverSapDB |
SQLite | xerial | org.sqlite.SQLiteDataSource |
Sybase | jConectar | com.sybase.jdbc4.jdbc.SybDataSource |
Nota Play 2.4 ahora usa HikariCP de forma predeterminada. Ha surgido un nuevo complemento para el marco de Play; jugar-hikaricp. Si está utilizando el excelente marco Play, su aplicación merece HikariCP. ¡Gracias equipo de Edulify!
tomekw ha creado un nuevo contenedor de Clojure y se puede encontrar aquí.
Tomekw ha creado un nuevo contenedor JRuby y se puede encontrar aquí.
Grupo de discusión de Google HikariCP aquí, preguntas frecuentes en aumento.
No olvide la Wiki para obtener información adicional como:
⇒ Java 8+ (los artefactos de Java 6/7 están en modo de mantenimiento)
⇒ biblioteca slf4j
¡Los proyectos de alto rendimiento nunca pueden tener demasiadas herramientas! Nos gustaría agradecer a las siguientes empresas:
Gracias a ej-technologies por su excelente generador de perfiles todo en uno, JProfiler.
YourKit admite proyectos de código abierto con su Java Profiler con todas las funciones. Haga clic en el logotipo de YourKit a continuación para obtener más información.
Realice cambios y envíe solicitudes de extracción desde la rama dev
en lugar de master
. Configure su editor para que utilice espacios en lugar de tabulaciones y respete el estilo aparente del código que está editando. La rama dev
siempre está más "actualizada" que la master
si buscas vivir la vida al límite.