- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我没有成功为我的 JPA 应用程序设置 CET 时区,该应用程序使用 AuditingEntityListener 来增加创建/上次修改日期。
我已经尝试过的事情:
在我的 application.properties(两种组合)中:
spring.jpa.properties.hibernate.jdbc.time_zone=UTC+1
spring.jpa.properties.hibernate.jdbc.time_zone=CET
将时区添加到我的 JDBC 连接(两种组合)
spring.datasource.url=jdbc:mysql://host:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC+1
spring.datasource.url=jdbc:mysql://host:3306/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=CET
添加了一个postconstruct(应用层)
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC+1"));
}
还尝试使用以下方法在数据库级别设置时区:
SET time_zone='+01:00';
无论如何都没有成功,我是不是错过了什么?
按如下方式使用@createdDate:
编辑
@Data
@Builder
@Entity
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor
@AllArgsConstructor
public class OrderHistoryRecord {
@Id
@GeneratedValue
@JsonIgnore
private Long id;
@NotNull
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Order.class)
@JoinColumn(name = "order_id", updatable = false)
@JsonIgnore
private Order order;
@CreatedDate
private Date date;
@Enumerated(EnumType.STRING)
private PaymentStatus paymentStatus;
@Enumerated(EnumType.STRING)
private ShipmentStatus shipmentStatus;
@Enumerated(EnumType.STRING)
private OrderHistoryRecordType type;
}
最佳答案
我遇到了同样的问题,并通过配置使用 UTC 而不是系统时区的自定义 DateTimeProvider 解决了这个问题,请参见下面的代码。
提到的手动设置值的解决方案对我来说感觉不合适,因为它混淆了 Spring JPA 扩展和 EntityListener 支持,你为什么要使用 Spring 的 JPA 审计?
Spring Boot 1的解决方案
@Configuration
@EnableJpaAuditing(dateTimeProviderRef = "utcDateTimeProvider")
public class JpaConfig {
@Bean
public DateTimeProvider utcDateTimeProvider() {
return () -> new GregorianCalendar(TimeZone.getTimeZone("UTC"));
}
}
为什么选择 Gregoriancalendar? Spring 将使用转换器 Jsr310Converters
将 GregorianCalendar
类型的对象转换为 LocalDateTime
.
Spring Boot 2 的解决方案
@Configuration
@EnableJpaAuditing(dateTimeProviderRef = "utcDateTimeProvider")
public class JpaConfig {
@Bean
public DateTimeProvider utcDateTimeProvider() {
return () -> Optional.of(LocalDateTime.now(ZoneOffset.UTC));
}
}
希望对你有帮助:)
关于java - AuditingEntityListener 的 Spring JPA Hibernate CET 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250489/
我有一个实体,想要实现 Audit 和 AuditHistory,两者都有效,但在单元测试时应用程序上下文为空。 实体 @Setter @Getter @NoArgsConstructor @AllA
我在各自的字段上使用了@CreatedBy、@CreatedDate、@LastModifiedBy 和@LastModifiedDate 注释。通过使用@MappedSuperclass、@Enti
我有以下 JPA 实体: @EntityListeners(AuditingEntityListener.class) @Entity public class EntityWithAuditingD
我正在使用 JPA 和 Spring 的一部分(如事务管理、JPA 存储库),但我不使用 Spring 进行依赖注入(inject),而是将 Spring 部分视为 POJO 对象。到目前为止,它运行
我没有成功为我的 JPA 应用程序设置 CET 时区,该应用程序使用 AuditingEntityListener 来增加创建/上次修改日期。 我已经尝试过的事情: 在我的 application.p
我是一名优秀的程序员,十分优秀!