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