我有一个正在运行的计划作业,我想计算过去 30 天的时间。为此,我收到一条警告,表示在表达式中检测到数字溢出。我怎样才能安全地给予 30 天?
@Override
@Scheduled(cron = "0 5 5 * * ?")
public void deleteRepliesAutomatically() {
if(schedulerActive.equals("true")) {
Session session = this.sessionFactory.getCurrentSession();
long now = System.currentTimeMillis();
// Below line gives warning.
long nowMinus1Week = now - (1000 * 60 * 60 * 24 * 30);
Timestamp nowMinus1WeekAsTimeStamp = new Timestamp(nowMinus1Week);
Query query = session.createQuery("from Replies as cm where cm.sortTimeStamp <:limit");
query.setParameter("limit", nowMinus1WeekAsTimeStamp);
List<Replies> repliesList = query.list();
for (Replies replies : repliesList) {
session.delete(replies);
session.flush();
}
}
}
谢谢。
最佳答案
问题在于您的表达式 (1000 * 60 * 60 * 24 * 30)
(结果为 2.592.000.000)是一个纯 int
溢出计算( Integer.MAX_VALUE
为 2.147.483.647)。
只需制作例如通过添加 L
将第一个数字变为 long
:
(1000L * 60 * 60 * 24 * 30)
这将使用足以容纳该值的long
数据类型进行整个计算。
关于Java、Intellij : Replacing numeric overflow expression with one which doesn't overflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269958/