小编oiz*_*ain的帖子

如何为Spring Boot JPA Timestamp指定UTC时区

环境

  • Spring Boot Starter Data JPA 1.4.2
  • Eclipselink 2.5.0
  • Postgresql 9.4.1211.jre7

问题

我正在构建一个Spring Boot微服务,它与不同的服务共享一个Postgresql数据库.数据库在外部初始化(在我们的控制之外),其他服务使用的日期时间列类型是没有时区的时间戳.因此,由于我希望db上的所有日期具有相同的类型,因此具有该类型是我的JPA实体日期的要求.

我在JPA实体对象上映射它们的方式如下:

@Column(name = "some_date", nullable = false)
private Timestamp someDate;
Run Code Online (Sandbox Code Playgroud)

问题是,当我按如下方式创建时间戳时:

new java.sql.Timestamp(System.currentTimeMillis())
Run Code Online (Sandbox Code Playgroud)

我查看数据库,时间戳包含我当地的时区日期时间,但我想将其存储在UTC中.这是因为我的默认时区设置为'Europe/Brussels',JPA/JDBC将我的java.sql.Timestamp对象转换为我的时区,然后再将其放入数据库.

找不到理想的解决方案

  • TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));具有我想要实现的效果,但它不适合,因为它不是特定于我的服务.即它会影响整个JVM或当前线程加上孩子.

  • 启动应用程序-Duser.timezone=GMT似乎也为正在运行的JVM的单个实例执行任务.因此,比前一个更好的解决方案.

但有没有办法在JPA/datasource/spring启动配置中指定时区?

java postgresql timezone jpa spring-boot

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

jpa ×1

postgresql ×1

spring-boot ×1

timezone ×1