Java Spring数据积存和事务

Java Spring数据积存和事务,java,spring,transactions,spring-boot,Java,Spring,Transactions,Spring Boot,我正在尝试在Crudepository接口上实现事务。我是这方面的初学者,目前的问题是,当收到来自不同客户的大量请求时,有时会收到重复的请求。 为了避免这种情况,我希望使用SQL事务及其在Spring中的实现,但我无法让它正常工作 以下是我如何尝试做到这一点: @Repository @EnableTransactionManagement @Transactional public interface ApplicationPackageDao extends CrudRepository&l

我正在尝试在Crudepository接口上实现事务。我是这方面的初学者,目前的问题是,当收到来自不同客户的大量请求时,有时会收到重复的请求。 为了避免这种情况,我希望使用SQL事务及其在Spring中的实现,但我无法让它正常工作

以下是我如何尝试做到这一点:

@Repository
@EnableTransactionManagement
@Transactional
public interface ApplicationPackageDao extends CrudRepository<ApplicationPackage, Long> {

/**
 * Find if a record exists for this package name ,
 * @param packageName
 * @return
 */
@Transactional
ApplicationPackage findByPackageName(String packageName);

}
然而,它似乎不起作用。 我尝试在前面调用的Java方法中添加@Transactionnal注释,但也无法使其正常工作

我应该如何处理Crudepository上的交易? 还是我使用了完全错误的东西?

我的建议:

使用@configuration注释检查上下文和配置类。从:

@EnableTransactionManagement注释提供了等效的 如果使用基于Java的配置,则支持。只需添加 @Configuration类的注释

@启用TransactionManagement并仅查看 对于同一应用程序上下文中的bean上的@Transactional,它们是 定义于

然后,您可以在服务中使用@Transactional,即使在方法中也是如此


除了crm86对@Transactional注释的回答之外,希望它对您有所帮助

在应用程序中注释入口点似乎是最佳做法,例如web控制器方法或计划批处理的主方法。通过使用注释属性TxType,您可以确保位于应用程序更深处的方法中的约束/条件,例如,如果没有运行trx上下文,TxType.MANDATORY将抛出,等等

@Transactional注释只有在类作为Springbean加载时才有效,例如类级别的@Component注释

请记住,只有RuntimeException才会导致回滚。如果希望检查异常导致回滚,则必须使用属性rollbackOn枚举每个此类异常

类级别的注释对该类的所有公共方法都有效。方法级别的注释覆盖类级别的注释。上面示例中的重复注释首先在类级别,然后在方法级别没有效果


您是否尝试在方法的顶部使用@Query注释?例如:@Queryselect a from[object]a where UPPERa.[attr]like UPPER?1?@chesh查询注释是否允许我获取事务操作。我的主要问题是关于crudepository隐含的方法,比如save。我想在允许findByPackageName之前等待执行save。谢谢,现在效果更好了。事实上,我在其他地方似乎有另一个问题,但现在我对交易有了更好的理解。非常感谢。@crm86对于Spring Boot,不需要为Crudepository扩展bean提供显式java配置;在这种情况下,是否仍然需要此注释,或者此注释不适用?是否在SpringBoot创建bean时自动启用此注释??