0
点赞
收藏
分享

微信扫一扫

JPA 缓存

mjjackey 2022-03-30 阅读 70
java

我沉迷于JPA的缓存。
因为我不明白它是如何工作的。

现象

  1. Web 应用程序中的数据引用
  2. 其他进程删除对应数据
  3. 在 Web 应用程序中再次引用相同的数据
    • 即使没有数据也可以参考

如果您将其视为缓存,那是很自然的。

原因

  • JPA (EclipseLink) 有 L1 缓存和 L2 缓存,默认启用。
    • L1缓存似乎是在同一个线程中缓存
    • 好像L2缓存是同一个JVM中的缓存

环境

  • JavaEE7
    • JPA
      • EclipseLink

措施

  • 我已经谈到了性能,但我禁用了缓存。

    • 默认情况下是禁用的,并且似乎可以使用annotation缓存 Entity 。
      • 参考主机是缓存吗?
  • persistance.xml

<persistence ..>
    <persistance-unit ...>

        <shared-cache-mode>NONE</shared-cache-mode> 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="com.example_jpawebtomcat_war_1.0-SNAPSHOTPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.example.jpawebtomcat.Books</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <shared-cache-mode>NONE</shared-cache-mode>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db?autoReconnect=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
        </properties>
    </persistence-unit>
</persistence>

参考URL

  • EclipseLink/示例/JPA/缓存 - Eclipsepedia
举报

相关推荐

0 条评论