如何在spring事务中包含集合?

如何在spring事务中包含集合?,spring,transactions,Spring,Transactions,我目前有一个带有hibernate的spring应用程序和一个运行在Jboss/wildfly上的PlataformTransactionManager 一些操作数据库的方法还调用包含LinkedBlockingQueue的bean。此队列存储定期发送到另一个线程上其他位置的日志消息(使用simple spring@Scheduler) 是否可以使我的队列(在bean中)具有事务性?即,如果事务回滚,我是否能够“撤消”对我的集合所做的任何操作?实现这一目标的最佳策略是什么 因此,简言之: @Se

我目前有一个带有hibernate的spring应用程序和一个运行在Jboss/wildfly上的PlataformTransactionManager

一些操作数据库的方法还调用包含LinkedBlockingQueue的bean。此队列存储定期发送到另一个线程上其他位置的日志消息(使用simple spring@Scheduler)

是否可以使我的队列(在bean中)具有事务性?即,如果事务回滚,我是否能够“撤消”对我的集合所做的任何操作?实现这一目标的最佳策略是什么

因此,简言之:

@Service
@Transactional
public PersonService {

    @Autowired
    EntityManager EM;

    @Autowired
    LoggingBuffer logger;

    public void addPerson(String name) {
          EM.persist(new Person(.....));

          logger.add("New person!");

          // A rollback here via some thrown exception would not affect the queue
    }
}

@Component
public class LoggingBuffer {

     private Queue<String> q= new LinkedBlockingQueue<String>();

     public add(String msg){
        q.add(msg);
     }
}
@服务
@交易的
公共人员服务{
@自动连线
实体管理器;
@自动连线
日志缓冲记录器;
public void addPerson(字符串名称){
EM.persist(新人(…);
添加(“新人!”);
//这里通过一些抛出的异常进行回滚不会影响队列
}
}
@组成部分
公共类日志缓冲区{
private Queue q=新的LinkedBlockingQueue();
公共添加(字符串消息){
q、 添加(味精);
}
}

试试这样的方法

@Transactional
public void addPerson(String name) {
          EM.persist(new Person(.....));

          //logger.add("New person!");

          // A rollback here via some thrown exception would not affect the queue
    }
public void wrapAddPerson(String name){
     List<String> localBuffer = new ArrayList<>();
try{
    addPerson(name);
    localBuffer.add(".....");
}catch(Exception e)
{
   localBuffer.clear();
}  
 finally{
      localBuffer.forEach(logger::add);
  }

}
@Transactional
public void addPerson(字符串名称){
EM.persist(新人(…);
//添加(“新人!”);
//这里通过一些抛出的异常进行回滚不会影响队列
}
公共人员(字符串名称){
List localBuffer=new ArrayList();
试一试{
联系人(姓名);
localBuffer.add(“…”);
}捕获(例外e)
{
localBuffer.clear();
}  
最后{
forEach(logger::add);
}
}