如何使用 HikariCP 在 Jboss 中配置 JNDI 数据源?

Posted

技术标签:

【中文标题】如何使用 HikariCP 在 Jboss 中配置 JNDI 数据源?【英文标题】:How to configure JNDI datasource in Jboss using HikariCP? 【发布时间】:2014-10-05 07:35:44 【问题描述】:

如何使用 HikariCP 在 jboss 配置文件中配置 JNDI 数据源 我在 Hikari 的帮助内容中找不到任何内容,只有 Tomcat 配置。

我有一个 Spring webb 应用程序,我在应用程序中定义了一个数据源,我想将它移动到一个 JNDI 数据源。

我的数据源定义是:

<datasource jndi-name="java:jboss/datasources/mydatasource" pool-name="mydatasource" enabled="true" use-java-context="true">
     <connection-url>jdbc:postgresql://localhost:5432/database</connection-url>
     <driver-class>org.postgresql.Driver</driver-class>
     <datasource-class>com.zaxxer.hikari.HikariDataSource</datasource-class>
     <driver>postgresql</driver>
     <pool>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>10</max-pool-size>
     </pool>
     <security>
         <user-name>user</user-name>
         <password>password</password>
     </security>
</datasource>

以及驱动定义:

<driver name="postgresql" module="org.postgresql.jdbc">
    <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>

我遇到了这个错误:

错误 [org.jboss.as.controller.management-operation](控制器引导线程)​​JBAS014613:操作(“添加”)失败 - 地址:([ (“子系统”=>“数据源”), (“数据源”=>“我的数据源”) ]) - 失败描述:“JBAS014771:缺少/不可用依赖项的服务”=> [ “jboss.driver-demander.java:jboss/datasources/mydatasource 丢失 [jboss.jdbc-driver.postgresql]”, “jboss.data-source.java:jboss/datasources/mydatasource 丢失 [jboss.jdbc-driver.postgresql]” ]

那么正确的配置方法是什么?

编辑:

按照指南创建 Tomcat 资源并使用question 中提供的信息,我来到了这个 DataSource 定义:

<datasource jta="false" jndi-name="java:jboss/mydatasource" pool-name="mydatasource" enabled="true" use-ccm="false">
    <connection-url>jdbc:postgresql://localhost:5432/databasename</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <driver>postgresql</driver>
    <pool>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>10</max-pool-size>
        <flush-strategy>FailingConnectionOnly</flush-strategy>
    </pool>
    <security>
        <user-name>username</user-name>
        <password>password</password>
    </security>
    <validation>
        <validate-on-match>false</validate-on-match>
        <background-validation>false</background-validation>
    </validation>
    <statement>
         <share-prepared-statements>false</share-prepared-statements>
    </statement>
</datasource>

我在 Jboss 中安装了 postgresql 驱动并声明了它。

在 Spring 配置中

...
@Bean
public DataSource dataSource() 
    final JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
    dataSourceLookup.setResourceRef(true);
    DataSource dataSourceTemp = null;
    try 
        dataSourceTemp = dataSourceLookup.getDataSource("jdbc/mydatasource");
     catch (DataSourceLookupFailureException e) 
        log.error("DataSource not found.");
    
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setDataSource(dataSourceTemp);
    return new HikariDataSource(hikariConfig);

...

此代码基于 HikariJNDIFactory 代码,似乎一切正常,但我想我必须创建一个带有连接属性的属性对象,我必须在对象中包含哪些属性?

【问题讨论】:

【参考方案1】:

这是一个“纯”Tomcat JNDI 数据源的配置:

https://github.com/brettwooldridge/HikariCP/wiki/JNDI-DataSource-Factory-(Tomcat,-etc.)

您可能还会找到这个答案 Re: Spring + Tomcat + JNDI 信息丰富:

How to use JNDI DataSource provided by Tomcat in Spring?

还推荐最新的 HikariCP 2.0.1。

【讨论】:

感谢您的快速回答,我已使用您的建议,但仍有一些问题:在 Tomcat 资源声明中有一个属性“工厂”,我在 Jboss 数据源定义中找不到该属性构造数据源的强制属性?我可以在 Jboss 中声明一个数据源并将其检索到 Spring 配置类,但问题是如何使用 HikariDataSource 类声明数据源? 这个 JBoss 示例有帮助吗? genesyslab.info/wiki/index.php/Connection_Pooling 感谢链接对我的帮助很大,但我采取了截然不同的方法,我根据 HikariJNDIFactory 上的代码创建了 HikariDataSource 对象,我用 Spring 类加载了 JNDI 数据源并将数据源放入一个新的 HikariConfig 对象,但我仍然不知道如何为 HikariConfig 构造函数构建 Properties 对象。 @GersonSosa 在这里同样的问题。我可以创建一个 HikariConfig、jndi 数据源和实体管理器,但找不到如何将它们放在一起。在 HikariCPConnectionProvider 中有一个 DataSource 属性,但不能用 spring 访问。当我们实例化提供者时,它只接受来自 jpaProperties 映射的字符串 @brettw,链接不再可用(似乎他们改变了目标)。可以转发吗?

以上是关于如何使用 HikariCP 在 Jboss 中配置 JNDI 数据源?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP

Spring Boot 2:如何使用 application.properties 文件配置 HikariCP

为啥HikariCP被号称为性能最好的Java数据库连接池,如何配置使用

HikariCP实战 | 通过查看源码分析如何解决maxLifeTime配置问题

[转帖]为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用

为啥HikariCP被号称为性能最好的Java数据库连接池,如何配置使用