【问题标题】:Spring - Hikari CP failing for DB2Spring - Hikari CP 对 DB2 失败
【发布时间】:2018-06-27 16:26:28
【问题描述】:

我正在尝试使用基于 xml 的 bean 配置为基于 spring 的应用程序使用 Hikari 连接池。下面是我的 Hikari 配置 bean,我使用 Db2 作为我的数据库。

<bean id="HikariConfig_UId_Primary" class="com.zaxxer.hikari.HikariConfig">
    <property name="poolName" value="uidPrimaryCP" />
    <property name="connectionTestQuery" value="select 1 from sysibm.systables fetch first row only with UR" />
    <property name="dataSourceClassName" value="${Jdbc_DataSourceClassName}" />
    <property name="maximumPoolSize" value="${Jdbc_MaxPoolSize}"/>
    <property name="idleTimeout" value="${Jdbc_IdleTimeOut}" />
    <property name="maxLifetime" value="${Jdbc_MaxLifeTime}" />
    <property name="connectionTimeout" value="${Jdbc_ConnTimeOut}" />

    <property name="dataSourceProperties">
        <props>
            <prop key="url">${Jdbc_UID_Primary}</prop>
            <prop key="user">${Jdbc_UserId}</prop>
            <prop key="password">${Jdbc_Password}</prop>
        </props>
    </property>
    </bean>

<bean id="UID_Primary_DataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <constructor-arg ref="HikariConfig_UId_Primary" />
    </bean>

它未能注册 bean,说数据库 url 属性 - 目标类 com.ibm.db2.jcc.DB2SimpleDataSource 上不存在 url。 下面是完整的堆栈跟踪..

com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context: {0}
                                     org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UID_Primary_DataSource' defined in class path resource [config/SpringDbContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.zaxxer.hikari.HikariDataSource]: Constructor threw exception; nested exception is java.lang.RuntimeException: Property url does not exist on target class com.ibm.db2.jcc.DB2SimpleDataSource
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:278)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1114)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1017)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at com.deere.u90.iafservice.unifieduser.application.ApplicationRegistry.loadSpringLdapContext(ApplicationRegistry.java:

非常感谢任何帮助..

谢谢..

【问题讨论】:

  • 那么,错误消息的哪一部分似乎不清楚?可以检查有效的属性名称in the manual

标签: java spring db2 websphere hikaricp


【解决方案1】:

我已经使用 spring boot 连接到 Hikari,但没有使用 xml 配置。看我的帖子here

我认为,添加以下属性应该可以修复错误。

<property name="jdbcUrl" value="" />
<property name="username" value="" />
<property name="password" value="" />

【讨论】:

    【解决方案2】:

    您似乎有几处错误。您没有发布变量 ${Jdbc_DataSourceClassName} 的值,因为它似乎在运行时解析为 DB2SimpleDataSource。根据this IBM KnowledgeCenter topic,该数据源不可合并,并且由于您以“我正在尝试使用 Hikari 连接池”开始帖子,我假设您想要一个可合并的 DS,如 com.ibm.db2.jcc.DB2ConnectionPoolDataSource 所描述的@ 987654322@。 第二个问题是 DB2 Datasource 类不支持 url 属性,只有 DB2 DriverManager 接口支持它。 DB2 数据源类的抽象基础的 KC 主题 DB2BaseDataSource

    您可以在 DataSource 或 url 参数中设置所有属性 DriverManager.getConnection 调用。

    url 不是列出的属性之一,因此您需要使用主机名、端口等属性建立与数据源的连接

    【讨论】:

    • 嗨 Rowe.. 感谢您的推荐。所以代替 DataSourceClassName,我可以保留以下属性 以便数据源可池化..?
    • 我假设由于属性名称是“dataSourceClassName”,它必须指向数据源类而不是像 DB2Driver 这样的 DriverManager。
    • 而不是 dataSourceClassName,我将其更改为 driverClassName - 如此处所述 - stackoverflow.com/a/31029760/6525686
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2018-10-14
    • 2021-05-08
    相关资源
    最近更新 更多