两个maven构建,相同的代码,相同的库,但一个战争失败与HibernateException &g



相同的JDK(1.8)。同样的Maven (v . 3.0)。两者都用Jenkins编译(并且都由Jenkins安装)。构建时一切正常,但部署时其中一个war失败。由于丢失Hibernate会话(下面的堆栈),@Scheduled任务失败。唯一的区别是一个war是建立在CentOS和另一个在Ubuntu(一个建立在Ubuntu失败)。

我应该找什么?一些系统组件的差异?有没有像未初始化的变量在Java中工作像在C(你可以得到不同的初始值取决于构建类型)。

2021-10-11 16:40:00.0003 ERROR: scheduling.support.TaskUtils$LoggingErrorHandler.Unexpected error occurred in scheduled task.
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:993)
at com.example.dao.SettingDAO.getByKeys(SettingDAO.java:139)

正如war内的注意——我已经比较文件的文件。一切都是一样的。好像只有一个罐子是不同的。但是就元数据而言,因为jar中的文件也完全相同,除了builddef.lst中的路径和pom.properties中的日期。

PS:war本身运行在完全相同的环境中。它是通过Jenkins部署的,所以每次都是完全相同的过程。环境为Tomcat 7、JDK7、PG10。

所以问题是@Scheduled@Transactional在同一方法上。非常奇怪的是,它可以在一台Linux机器上运行,而在另一台机器上却不能运行(即使在完全相同的机器上运行)。

所以解决方案是用@Scheduled创建一个只调用@Transactional方法的~代理类。例句:

@Service
public class SchedulerProxyService {
// ...
@Scheduled(cron = "${cron.loanNotifyReturns}")
public void loanNotifyReturns() throws LoanScheduleFailedException {
loanService.notifyReturns();
}
}

相关内容

  • 没有找到相关文章

最新更新