java - 如何在 Spring(4) 上下文中为 HSQL 配置 Hikari CP?

标签 java jdbc hsqldb spring-4 hikaricp

我想使用Hikari CP在我的 Spring 4.0.3 上下文中,但似乎我遗漏了一些东西。

我的 bean 配置如下:

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

但我得到一个异常(exception):

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

我尝试使用 HSQL org.hsqldb.jdbc.JDBCDataSource 配置 dataSourceClassName

这样:

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

也是这样:

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

两次我都遇到了以下异常:

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

有人可以向我展示一个与 HSQL DB 一起使用的有效 Hikari CP Spring 4 bean 配置吗?

我对 MySql、PG 等不感兴趣,因为我知道如何让它们工作。但我无法用 HSQL 来完成它。

谢谢

使用技术:Java8、Spring 4.0.3、HSQL 2.3.2

最佳答案

完成工作的一种方法是提供 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>

当然还有其他解决方案。

HTH,

关于java - 如何在 Spring(4) 上下文中为 HSQL 配置 Hikari CP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369818/

相关文章:

java - Android 上的 JDBC

java - HSQL 中的 H2 RUNSCRIPT 等效项

java - Protocol Buffer Stream 测试 gRPC 的一百万条消息

java - 抛出异常并从 finally 返回 - Tomcat 挂起

java - Spring 启动: Can't Autowire Class from Other Jar Library

java - 如何忽略单元测试中的某些字段,Hibernate

java - 从 SQL 到 HSQLDB 的 IIF 函数

java - Tomcat 端口重定向在版本 6.0.28 中不起作用

java - 在 Java DIY 中克隆对象及其内部数组

java - 为什么调用 Statement.close() 不会立即释放 Statement 对象创建的 ResultSet 对象?