Spring JMS MessageListener实现类不能参与事务拦截

Spring JMS MessageListener实现类不能参与事务拦截,否则会出现MessageListener的实现类在操作数据库时找不到数据库,特别是多租户数据库切换条件下,会出现两种情况:

(1)服务器刚启动第一次执行Listener时会报错:

  Hibernate:Could not execute JDBC batch update 以及Hibernate:NO database selected

  Exception in thread "main" org.hibernate.exception.GenericJDBCException: Could not execute JDBC  b

(2)执行第二次以后,如果涉及到不同租户的交替操作,当前租户的Listener运行所取得的数据库是上一个租户的数据库,造成存储的数据窜库。

解决办法:

(1)配置Listener实现类不参与Spring事务拦截,如图1:

Spring JMS MessageListener实现类不能参与事务拦截_第1张图片

(2)如果与方法(1)事务拦截冲突,直接修改类名把Listener实现类排除在hibernate事务拦截之外,如把

SmsJMSReceiverServiceImpl改成SmsJMSReceiver。

你可能感兴趣的:(MessageListener)