tutorial test maximum hikari example borrow java jdbc hsqldb spring-4 hikaricp

java - test - spring datasource hikari maximum pool size default



¿Cómo configurar Hikari CP para HSQL en un contexto Spring(4)? (4)

Una forma de hacer el trabajo es proporcionar una instancia de un objeto DataSource:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg> <bean class="com.zaxxer.hikari.HikariConfig"> <property name="dataSource"> <bean class="org.hsqldb.jdbc.JDBCDataSource"> <property name="url" value="${database.database.jdbc.url}"/> <property name="databaseName" value="${database.name}"/> <property name="user" value="${database.user}"/> <property name="password" value="${database.password}"/> </bean> </property> </bean> </constructor-arg> </bean>

seguro hay otras soluciones

HTH,

Quiero usar Hikari CP en mi contexto de Spring 4.0.3 pero parece que me falta algo.

Mi configuración de beans se ve así:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg> <bean class="com.zaxxer.hikari.HikariConfig"> <constructor-arg> <props> <prop key="dataSource.driverClassName">${database.driver}</prop> <prop key="dataSource.jdbcUrl">${database.database.jdbc.url}</prop> <prop key="dataSource.port">${database.port}</prop> <prop key="dataSource.databaseName">${database.name}</prop> <prop key="dataSource.user">${database.user}</prop> <prop key="dataSource.password">${database.password}</prop> </props> </constructor-arg> </bean> </constructor-arg> </bean>

pero tengo una excepción:

Caused by: java.lang.IllegalArgumentException: one of either dataSource or dataSourceClassName must be specified at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:655) at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:66) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ... 15 more

He intentado configurar dataSourceClassName utilizando HSQL org.hsqldb.jdbc.JDBCDataSource

de esa manera:

<prop key="dataSourceClassName">org.hsqldb.jdbc.JDBCDataSource</prop>

también de esa manera:

<prop key="dataSource.ClassName">org.hsqldb.jdbc.JDBCDataSource</prop>

las dos veces recibí la siguiente excepción:

Caused by: java.lang.RuntimeException: java.beans.IntrospectionException: Method not found: setPort at com.zaxxer.hikari.util.PropertyBeanSetter.setProperty(PropertyBeanSetter.java:109) at com.zaxxer.hikari.util.PropertyBeanSetter.setTargetFromProperties(PropertyBeanSetter.java:61) at com.zaxxer.hikari.pool.HikariPool.initializeDataSource(HikariPool.java:497) ... 23 more Caused by: java.beans.IntrospectionException: Method not found: setPort at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:110) at com.zaxxer.hikari.util.PropertyBeanSetter.setProperty(PropertyBeanSetter.java:97) ... 25 more

¿Alguien puede mostrarme una configuración de bean Hikari CP Spring 4 en funcionamiento que funcione con un DB HSQL ?

No estoy interesado en MySql, PG, etc. porque sé cómo hacer que funcionen. Pero no puedo lograr hacerlo con HSQL.

Gracias,

Tecnología utilizada: Java8, Spring 4.0.3, HSQL 2.3.2


Algunas de sus propiedades en su ejemplo no necesitan el prefijo ''dataSource'' si está utilizando una clase de controlador.

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg> <bean class="com.zaxxer.hikari.HikariConfig"> <constructor-arg> <props> <prop key="driverClassName">${database.driver}</prop> <prop key="jdbcUrl">${database.database.jdbc.url}</prop> <prop key="username">${database.user}</prop> <prop key="password">${database.password}</prop> </props> </constructor-arg> </bean> </constructor-arg> </bean>

Y port y databaseName se pueden incluir en jdbcUrl .


Para una solución pura de Java-config, he utilizado lo siguiente (en una clase con una anotación @Configuration e incluida en el componente-scan-path):

... @Bean public DataSource dataSource() { return new HikariDataSource(hikariConfig()); } private HikariConfig hikariConfig() { HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName); config.setJdbcUrl(jdbcUrl); config.setUsername(username); config.setPassword(password); return config; } ...

HTH


Probado bajo HikariCP 2.3.8 e Hibernate 4.3.8.Final:

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> <constructor-arg> <props> <prop key="dataSourceClassName">org.postgresql.ds.PGSimpleDataSource</prop> <prop key="dataSource.user">${database.username}</prop> <prop key="dataSource.password">${database.password}</prop> <prop key="dataSource.databaseName">${database.databaseName}</prop> <prop key="dataSource.serverName">${database.serverName}</prop> <prop key="connectionTestQuery">SELECT 1</prop> </props> </constructor-arg> </bean> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg ref="hikariConfig" /> </bean>

Para dataSourceClassName , mira la popular tabla de nombres de clases de fuentes de datos .

ConnectionTestQuery es necesario para postgresql según https://github.com/brettwooldridge/HikariCP/issues/225 , no debería ser necesario cuando se utiliza una versión del controlador jdbc más reciente.