SpringBoot:JPA + AuditingEntityListener时区设置方式

 更新时间:2021年12月21日 11:06:11   作者:晴空排云  
这篇文章主要介绍了SpringBoot:JPA + AuditingEntityListener时区设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JPA + AuditingEntityListener时区设置

在SpringBoot项目中,如果应用启用了EnableJpaAuditing并且使用AuditingEntityListener对实体的创建时间、更新时间进行自动审计,可能存在生成时间的时区和系统时区不一致的问题。

可在应用配置中添加如下配置

将时区设定为指定时区:

spring.jpa.properties.hibernate.jdbc.time_zone = GMT+8

@EntityListeners(AuditingEntityListener.class)介绍

@EntityListeners

源码

/**
 * Specifies the callback listener classes to be used for an
 * entity or mapped superclass. This annotation may be applied
 * to an entity class or mapped superclass.
 *
 * @since Java Persistence 1.0
 */
@Target({TYPE})
@Retention(RUNTIME)
public @interface EntityListeners {
    /** The callback listener classes */
    Class[] value();
}

分析

从源码的注释中可以很清楚的了解到该注解的作用,简单翻译如下:该注解用于指定Entity或者superclass上的回调监听类。该注解可以用于Entity或者superclass上。

AuditingEntityListener.class

源码

/**
 * JPA entity listener to capture auditing information on persiting and updating entities. To get this one flying be
 * sure you configure it as entity listener in your {@code orm.xml} as follows:
 * 
 * <pre>
 * &lt;persistence-unit-metadata&gt;
 *     &lt;persistence-unit-defaults&gt;
 *         &lt;entity-listeners&gt;
 *             &lt;entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" /&gt;
 *         &lt;/entity-listeners&gt;
 *     &lt;/persistence-unit-defaults&gt;
 * &lt;/persistence-unit-metadata&gt;
 * </pre>
 * 
 * After that it's just a matter of activating auditing in your Spring config:
 * 
 * <pre>
 * &#064;Configuration
 * &#064;EnableJpaAuditing
 * class ApplicationConfig {
 * 
 * }
 * </pre>
 * 
 * <pre>
 * &lt;jpa:auditing auditor-aware-ref="yourAuditorAwarebean" /&gt;
 * </pre>
 * 
 * @author Oliver Gierke
 * @author Thomas Darimont
 */
@Configurable
public class AuditingEntityListener {
 private ObjectFactory<AuditingHandler> handler;
 /**
  * Configures the {@link AuditingHandler} to be used to set the current auditor on the domain types touched.
  * 
  * @param auditingHandler must not be {@literal null}.
  */
 public void setAuditingHandler(ObjectFactory<AuditingHandler> auditingHandler) {
  Assert.notNull(auditingHandler, "AuditingHandler must not be null!");
  this.handler = auditingHandler;
 }
 /**
  * Sets modification and creation date and auditor on the target object in case it implements {@link Auditable} on
  * persist events.
  * 
  * @param target
  */
 @PrePersist
 public void touchForCreate(Object target) {
  if (handler != null) {
   handler.getObject().markCreated(target);
  }
 }
 /**
  * Sets modification and creation date and auditor on the target object in case it implements {@link Auditable} on
  * update events.
  * 
  * @param target
  */
 @PreUpdate
 public void touchForUpdate(Object target) {
  if (handler != null) {
   handler.getObject().markModified(target);
  }
 }
}

分析

同样的从该类的注释也可以了解到该类的作用:这是一个JPA Entity Listener,用于捕获监听信息,当Entity发生持久化和更新操作时。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis深入讲解resultMap的定义及用法

    mybatis深入讲解resultMap的定义及用法

    MyBatis的每一个查询映射的返回类型都是ResultMap,当我们提供返回类型属性是resultType时,MyBatis会自动给我们把对应值赋给resultType所指定对象的属性,当我们提供返回类型是resultMap时,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用
    2022-04-04
  • 彻底搞懂Java多线程(五)

    彻底搞懂Java多线程(五)

    这篇文章主要给大家介绍了关于Java面试题之多线程和高并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-07-07
  • java中CompletableFuture异步执行方法

    java中CompletableFuture异步执行方法

    本文主要介绍了java中CompletableFuture异步执行方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 引入mybatis-plus报 Invalid bound statement错误问题的解决方法

    引入mybatis-plus报 Invalid bound statement错误问题的解决方法

    这篇文章主要介绍了引入mybatis-plus报 Invalid bound statement错误问题的解决方法,需要的朋友可以参考下
    2020-05-05
  • Spring Bean注册与注入实现方法详解

    Spring Bean注册与注入实现方法详解

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入。依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。Spring容器中支持的依赖注入方式主要有属性注入、构造函数注入、工厂方法注入
    2022-10-10
  • java poi设置生成的word的图片为上下型环绕以及其位置的实现

    java poi设置生成的word的图片为上下型环绕以及其位置的实现

    这篇文章主要介绍了java poi设置生成的word的图片为上下型环绕以及其位置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Spring中ThreadLocal的解析

    Spring中ThreadLocal的解析

    这篇文章主要介绍了Spring中ThreadLocal的解析,Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突,下面一起进入文章学子详细内容吧
    2022-01-01
  • SpringCloud+SpringBoot项目搭建结构层次的实例

    SpringCloud+SpringBoot项目搭建结构层次的实例

    这篇文章详细介绍了SpringCloud项目的架构层次及其搭建经验,包括Controller层、Service层、Repository层、Entity层、DTO层、Exception层等,通过文字和图片的形式,帮助读者理解如何组织和实现一个SpringBoot项目的不同层次
    2025-01-01
  • java -jar启动参数设置file.encoding编码,解决中文乱码的问题

    java -jar启动参数设置file.encoding编码,解决中文乱码的问题

    这篇文章主要介绍了java -jar启动参数设置file.encoding编码,解决中文乱码的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • springboot集成@DS注解实现数据源切换的方法示例

    springboot集成@DS注解实现数据源切换的方法示例

    本文主要介绍了springboot集成@DS注解实现数据源切换的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论