草庐IT

MySQL并发事务

全部标签

java - jOOQ 和 Spring 事务管理

我使用jOOQ3.8和SpringBoot1.4.1。我看到jOOQ使用一种机制来保证handlingoftransactions.如果我定义了一个注释为事务性的方法并且在执行两个插入时,它们是否在同一事务中执行,例如@Transactional(propagation=Propagation.MANDATORY)publicdoInsert(){DSL.using(configuration).insertInto(...);DSL.using(configuration).insertInto(...);}所有执行的insert在异常情况下会回滚吗?它们会在一笔交易中执行吗?或者,

java - 为什么在每个 session 可能有并发请求的情况下不应该使用 Tomcat 的 PersistentValve?

在类评论顶部PersistentValve有一个使用限制:/**...*USAGECONSTRAINT:Toworkcorrectlyitassumesonlyonerequestexists*persessionatanyonetime....*/为什么这里有这个约束?仔细阅读代码,我发现了三个原因:在不同Tomcat实例上对同一session的并发请求可能会受到“最后写入获胜”的影响,因此可能会丢失session数据。由于session.recycle(),在同一个Tomcat实例上对同一个session的并发请求可能会导致NPE在thesharedsessionobject中将管

java - Junit 测试并发

我正在尝试在通过多线程访问时测试java.util.concurrent.ConcurrentLinkedQueue。下面提到的是我使用RepeatedTest在两个并发线程中运行的Junit测试。我的问题是:使用RepeatedTest在ConcurrentLinkedQueue上测试并发性是否正确?源代码如下。谢谢importjava.util.concurrent.ConcurrentLinkedQueue;importjunit.extensions.ActiveTestSuite;importjunit.extensions.RepeatedTest;importjunit.

java - 你如何重构@Transactional 方法来拆分非事务部分

我有一个作为独立Java应用程序的一部分运行的数据访问类。它目前正在工作,这意味着定义了一个事务管理器,但我想重构该类以减少事务的范围,但如果我这样做,我会得到org.hibernate.HibernateException:NoHibernateSessionboundtothread,andconfiguration不允许在此处创建非事务性,这意味着移动@Transactional以某种方式阻止了它被识别。我的原始版本的重构方法是私有(private)的,但我发现有人建议将其更改为公开的,因为在某些情况下注释不会被提取。publicclassDoStuff{@Transaction

java - 无法从 JPA 实体在 MySql 中生成枚举类型

我正在使用JPA2.1。我想生成像这样的mysql枚举类型列:genderenum('male','female')。我的枚举类是publicenumGender{MALE,FEMALE}在JPA实体类中@EnumeratedprivateGendergender;//generateinttypecolumn和@Enumerated(EnumType.STRING)privateGendergender;//generatevarchartypecolumn.有什么方法可以在MySql中生成枚举类型的列吗? 最佳答案 使用以下代码

java - 并发观察者模式

如果我遇到如下情况:ObserverA、ObserverB、ObserverC都继承自AbstractObserver。我创建了一个观察者列表:Listlist=newArrayList();list.add(newObserverA());list.add(newObserverB());list.add(newObserverC());并且具有以下方法的某种处理程序在“主”线程中运行:publicvoideat(Fooditem){for(AbstractObservero:list){o.eatFood(item);}}publicvoiddrink(Coffeecup){for

java - 使用 EJB 计时器的 WebSphere 中的 Bean 事务超时

通过JBoss/Wildfly,可以使用@TransactionTimeout专有注释并为特定sessionBean定义事务超时。使用IBMWebSphere的等效方法是什么?我们正在使用EJBTimer,其中一个Bean需要一个多小时才能完成。Wildfly示例代码:importorg.jboss.ejb3.annotation.TransactionTimeout;@Stateless@TransactionTimeout(value=7200)publicclassTimerBean{}注意:使用WebSphere8.5。修改全局事务时间不是一个选项,我们需要为特定的sessio

java - Spring 事务中 REQUIRES_NEW 和 NESTED 传播行为的差异

前言首先:它不是Differencesbetweenrequires_newandnestedpropagationinSpringtransactions的副本-我读了它,但没有找到我的问题的答案问题:阅读我提到的主题后,我明白了物理交易计数中传播级别的主要区别:2dbtransactions-forREQUIRES_NEWforouterandforinnermethod1db事务-用于外部和内部方法的NESTED。如果底层数据库不支持保存点,它将无法工作但从我的观点来看,逻辑似乎是相同的。如何理解在实践中使用哪个级别?有什么用例可以理解吗?行为差异的方便示例?附言我想对于其他交易

java - Spring 和 Hibernate 的事务管理使非 Activity 事务成为可能

我正在使用Spring和Hibernate管理一个JavaWeb应用程序。我使用Spring和Hibernate工具来处理持久性级别,因此我不需要提交\回滚我的事务。该应用程序是并发的,因此用户可以修改相同的记录,我决定使用ReadCommitted作为隔离级别。问题是有时我会在日志中发现JDBC错误,并且所有下一个请求都会出现相同的错误,从而阻止应用程序行为。这些是事务管理中涉及的组件:@BeanpublicSpringLocalSessionFactoryBeansessionFactory(DataSourcedataSource){SpringLocalSessionFacto

Java 8 并行流并发分组

假设我有一个类ClassPerson{Stringname;Stringuid;Stringphone;}我正在尝试按类(class)的所有领域进行分组。我如何在JAVA8中使用并行流来转换一个ListintoMap>其中映射的键是类中每个字段的值。JAVA8以下示例按单个字段分组,我如何将一个类的所有字段放入单个Map中?ConcurrentMap>byGender=roster.parallelStream().collect(Collectors.groupingByConcurrent(Person::getGender)); 最佳答案