我将mysql版本从5.5.40迁移到8.0.18。迁移后,我更改了驱动程序类的“按JBoss 6数据源配置”。
<driver-class>com.mysql.cj.jdbc.Driver</driver-class>
我已将mysql-connector-java-8.0.18放到lib文件夹中。然后我的应用程序毫无问题地部署到Jboss 6。当我开始测试应用程序时,我发现了一些东西。关于Simulation Job实体,我设置了startDateTime列一个约会。将模拟作业保存到数据库后,startDateTime与我设置的开始日期不同。但是只有一秒钟差异。例如,我将日期设置为2019-11-08 15:20:12,数据库将日期存储为2019-11-08 15:20:13。我不确定这与时区有关。但是无论如何,我使用以下语句更改了MySQL的时区。
SET GLOBAL time_zone ='+3:00';
@Entity
@Table(name = "SIMULATION_JOB")
public class SimulationJob implements Serializable {
/**
*
*/
private static final long serialVersionUID = -1768265008703114922L;
public SimulationJob() {
super();
}
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "SimulationJobIdGen")
@Column(name = "ID")
private long id;
@Column(name = "NAME")
@NotNull
@Size(max = 50)
private String name;
@Column(name = "PRIORITY")
private int priority;
@ManyToOne
@JoinColumn(name = "OWNER_USER_ID")
private User ownerUser;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATE_DATETIME")
private Date createDateTime;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "START_DATETIME")
private Date startDateTime;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "END_DATETIME")
private Date endDateTime;
}
我想可能与时间戳取整有关。在MySQL 5.6.4之前,小数秒(即毫秒)的处理方式有所不同。
另请参见:
https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html
https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html