Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在单个事务中运行spring@Transactional注释方法_Java_Mysql_Spring Jdbc_Spring Transactions - Fatal编程技术网

Java 在单个事务中运行spring@Transactional注释方法

Java 在单个事务中运行spring@Transactional注释方法,java,mysql,spring-jdbc,spring-transactions,Java,Mysql,Spring Jdbc,Spring Transactions,我们有几个类用于以命令-查询分离的方式向数据库层写入数据和从数据库层读取数据 这些类中的每一个都分别用@Transactional和@Transactional(readOnly=true)注释 现在我们已经实现了一个数据导入,它创建了许多对象,并使用我们的命令层将它们写入数据库 目前,单个对象的每次写入都是在其自己的事务中完成的,我很确定这是一个主要的性能杀手 是否有一种简单的方法来注释数据导入类,即使它多次调用命令层中的许多@Transactional注释方法,所有操作都将在单个事务中完成

我们有几个类用于以命令-查询分离的方式向数据库层写入数据和从数据库层读取数据

这些类中的每一个都分别用@Transactional和@Transactional(readOnly=true)注释

现在我们已经实现了一个数据导入,它创建了许多对象,并使用我们的命令层将它们写入数据库

目前,单个对象的每次写入都是在其自己的事务中完成的,我很确定这是一个主要的性能杀手

是否有一种简单的方法来注释数据导入类,即使它多次调用命令层中的许多@Transactional注释方法,所有操作都将在单个事务中完成


这是否是一种提高插入性能的有效方法,或者你认为这是一个坏主意吗?

错误一:我使用了一个ExcutoService,因为我在这个Spring中读到的不支持多线程与事务相结合。


错误二:我替换了ExecutorService,直接用注释@Transactional调用了spring托管类方法,但这次它不起作用,因为类嵌套在调用类中,因此它不被视为“来自外部”的调用。

错误一:我使用了ExecutorService,正如我在本文中所读到的,spring不支持将多线程与事务相结合


错误二:我替换了ExecutorService,直接用注释@Transactional调用了spring托管类方法,但这次它不起作用,因为类嵌套在调用类中,因此它不被视为“来自外部”的调用。

只注释父方法。那个叫他们所有人的人。事实上,在一个事务中完成所有这些都会更好,因为所有的事务都将一起完成……我已经尝试过了,但似乎没有任何效果——难道不是这样吗,一个从另一个实例调用事务方法的事务方法,会自动导致创建一个新的事务吗?这取决于。在通过
接口自动连线的方法中
?您正在使用AspectJ编织吗?@SebastianRiemer您需要进行
传播。需要\u NEW
才能创建新事务。默认情况下,它将加入现有事务。@SebastianRiemer完全不正常。只有当Spring可以注入代码时。如果您自动连接一个
接口
,那么spring可以轻松地创建一个代理来执行此操作;否则,您需要使用更奇特的方法,例如AspectJ加载时编织。总之,通过
接口
进行布线是使用现代Spring的唯一合理方法。只需注释父方法即可。那个叫他们所有人的人。事实上,在一个事务中完成所有这些都会更好,因为所有的事务都将一起完成……我已经尝试过了,但似乎没有任何效果——难道不是这样吗,一个从另一个实例调用事务方法的事务方法,会自动导致创建一个新的事务吗?这取决于。在通过
接口自动连线的方法中
?您正在使用AspectJ编织吗?@SebastianRiemer您需要进行
传播。需要\u NEW
才能创建新事务。默认情况下,它将加入现有事务。@SebastianRiemer完全不正常。只有当Spring可以注入代码时。如果您自动连接一个
接口
,那么spring可以轻松地创建一个代理来执行此操作;否则,您需要使用更奇特的方法,例如AspectJ加载时编织。总之,通过
接口
布线是使用现代Spring的唯一明智的方法。