gpt4 book ai didi

java - spring boot 应用程序上的自定义 JPA 获取大小不适用于 IBM 自由核心

转载 作者:行者123 更新时间:2023-11-29 08:31:08 25 4
gpt4 key购买 nike

在应用程序(Spring boot + Spring data + JPA[hibernate] + Oracle)中,我们在 application.properties 文件中定义了以下获取大小的属性。

spring.jpa.properties.hibernate.jdbc.fetch_size = 500

上述属性适用于嵌入式 tomcat 容器。但是一旦我们在 websphere liberty 核心服务器上部署了应用程序。它总是采用默认的获取大小,即 1。容器无法识别定义的属性。

应用程序正在 JNDI 配置上运行。而 JNDI 配置定义在 liberty 的 server.xml 中。下面是代码片段。

<application id="Example" location="C:/Example.ear" name="Example" type="ear" />

<authData id="auth1" password="dev123" user="dev"/>
<dataSource jndiName="jdbc/example" type="oracle.jdbc.xa.client.OracleXADataSource">
<jdbcDriver libraryRef="OracleLib"/>
<properties.oracle URL="jdbc:oracle:thin:@//s123456.fr.net.intra:1521/test" databaseName="test" driverType="thin" password="dev123" portNumber="1521" serverName="s123456.fr.net.intra" user="dev"/>
</dataSource>
<resource-ref binding-name="jdbc/example" name="jdbc/example">
<authentication-alias name="auth1"/>
</resource-ref>enter code here

根据我的发现,我们可以为 db2 和 informix 设置提取大小,但没有为 properties.oracle 设置提取大小,如 here 所述

如果我使用实体管理器检索数据,如上所述获取大小属性有效,

@PersistenceContext
private EntityManager entityManager;

Query query = session.createSQLQuery("SELECT * FROM Employee");
query.list();

但我不想使用实体管理器,因为我们使用 spring 数据进行应用。

如何使用 spring 数据应用程序在 liberty core 中为 spring boot 设置获取大小?

最佳答案

Liberty 中的 properties.* 配置元素公开了特定 JDBC 供应商的数据源实现的配置。 properties.db2.jcc 和 properties.informix.jcc 具有 fetchSize 属性的原因是 JDBC 驱动程序的数据源本身支持通过 get/setFetchSize 方法在 DataSource 级别配置默认的 fetchSize。 Oracle JDBC driver 在它的数据源上没有这些方法,这就是为什么 properties.oracle 缺少这个配置。 (请注意,如果较新版本的 Oracle JDBC 驱动程序确实添加了这些方法,您可以在 properties.oracle 中包含 fetchSize="500"属性,即使模式没有它,Liberty 会将它发送到 Oracle JDBC 驱动程序,但目前 Oracle JDBC 驱动程序上没有可供 Liberty 调用的此类方法)

application.properties 中的 spring.jpa.properties.hibernate.jdbc.fetch_size 看起来是一种特定于 Spring 的配置 Hibernate 属性的方法。这将在 Hibernate 中实现,大概是通过它在从 JDBC 驱动程序获得它们后获得的 java.sql.Statement 对象上使用 java.sql.Statement.setFetchSize(value) 实现的。

看起来 Hibernate 文档为此目的有自己的属性,

hibernate.jdbc.fetch_size

记录在这里, http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-jdbc-properties

您应该希望能够使用它来配置值,而不是特定于 Spring 的方法。

关于java - spring boot 应用程序上的自定义 JPA 获取大小不适用于 IBM 自由核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com