[英]Spring + Hibernate + MS SQL server - UTC time zone
我用 Spring 4.2.5 + Hibernate 5.1.0 開發了簡單的應用程序 - 數據庫系統是 MS SQL Server 2014。
從幾天開始,我一直在努力在數據庫中正確存儲時間 + 時區。
我需要滿足的要求是:
為了實現它,我創建了名為 MyComment 的模型:
@Entity
@Table(name = "MY_COMMENT")
@EntityListeners(value = { MyCommentListener.class })
@Audited
public class MyComment implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "DATE_", nullable = false)
private Timestamp date;
...
}
為了在 UTC 時區強制保存日期,我使用了 Jadira 框架:
hibProperties.put("jadira.usertype.autoRegisterUserTypes", true);
hibProperties.put("jadira.usertype.javaZone", "UTC");
hibProperties.put("jadira.usertype.databaseZone", "UTC");
但是,在 MyComment 對象的每次創建/更新操作期間,MyCommentListener 正在從我的本地時區獲取日期(不是 UTC 日期!):
public class MyCommentListener {
@PreUpdate
@PrePersist
public void setLastUpdate(MyComment myComment) {
myComment.setDate(new Timestamp(System.currentTimeMillis()));
}
}
你知道我該如何解決這個問題嗎?
我將不勝感激任何幫助。 謝謝你。
AFAIK,問題出在聽眾身上。 在監聽器中替換以下代碼並驗證。 根據需要更改日期格式。
@PreUpdate
@PrePersist
public void setLastUpdate(MyComment myComment) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
myComment.setDate(dateFormat.getCalendar().getTime());
}
Spring 中沒有設置默認 TimeZone 的屬性對我來說很奇怪 - 至少我不知道它。
經過一番谷歌搜索后,我發現 Spring 中設置時區的最佳位置是WebApplicationInitializer
,因此我准備了以下代碼:
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
setupTimeZone();
}
private void setupTimeZone() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
}
您可以在應用程序屬性文件中設置時區屬性,如下所示。
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.