千家信息网

SpringBoot中JPA + AuditingEntityListener时区设置方式是什么

发表于:2025-11-19 作者:千家信息网编辑
千家信息网最后更新 2025年11月19日,这篇文章将为大家详细讲解有关SpringBoot中JPA + AuditingEntityListener时区设置方式是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相
千家信息网最后更新 2025年11月19日SpringBoot中JPA + AuditingEntityListener时区设置方式是什么

这篇文章将为大家详细讲解有关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: *  * 
 * <persistence-unit-metadata> *     <persistence-unit-defaults> *         <entity-listeners> *             <entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" /> *         </entity-listeners> *     </persistence-unit-defaults> * </persistence-unit-metadata> * 
* * After that it's just a matter of activating auditing in your Spring config: * *
 * @Configuration * @EnableJpaAuditing * class ApplicationConfig { *  * } * 
* *
 * <jpa:auditing auditor-aware-ref="yourAuditorAwarebean" /> * 
* * @author Oliver Gierke * @author Thomas Darimont */@Configurablepublic class AuditingEntityListener { private ObjectFactory 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) { 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发生持久化和更新操作时。

关于SpringBoot中JPA + AuditingEntityListener时区设置方式是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0