Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
将spring Batch Java项目的spring boot/spring framework升级为2.x.x/5.x.x,现在数据未写入/保存到数据库(Postgresql)_Java_Spring_Spring Boot_Hibernate_Spring Batch - Fatal编程技术网

将spring Batch Java项目的spring boot/spring framework升级为2.x.x/5.x.x,现在数据未写入/保存到数据库(Postgresql)

将spring Batch Java项目的spring boot/spring framework升级为2.x.x/5.x.x,现在数据未写入/保存到数据库(Postgresql),java,spring,spring-boot,hibernate,spring-batch,Java,Spring,Spring Boot,Hibernate,Spring Batch,我最近将我的Spring批处理Java应用程序从Spring-boot-starter-parent-1.5.9.RELEASE升级/迁移到->Spring-boot-starter-parent-2.2.4.RELEASE,它随后引入了5.X.X(确切地说是5.2.3.RELEASE)springframework依赖项(在我使用4.X.X之前)。我使用的一些主要工具有: spring-boot-starter-parent-2.2.4 spring-boot-starter-batch sp

我最近将我的Spring批处理Java应用程序从
Spring-boot-starter-parent-1.5.9.RELEASE
升级/迁移到->
Spring-boot-starter-parent-2.2.4.RELEASE
,它随后引入了5.X.X(确切地说是5.2.3.RELEASE)springframework依赖项(在我使用4.X.X之前)。我使用的一些主要工具有:

spring-boot-starter-parent-2.2.4
spring-boot-starter-batch
spring-boot-starter-jpa
spring-boot-starter-web
hibernate-core
hibernate-envers
hibernate-entitymanager
postgresql
对于上下文,我的应用程序读入.csv文件并解析数据,然后简单地将其写入postgresql数据库

经过今天数小时的调试,我知道我第一次调用将数据写入数据库是通过一个名为
saveAll()
的JpaRepository方法完成的,该方法基本上获取实体的ArrayList(Iterable)并将它们批量插入数据库,当它从Spring AOP库进入
JDKDDynamicAOPProxyClass
时,在某个地方失败。以前,我使用的是
save()
方法,但是一旦我升级了依赖项,这个方法就不起作用了

我知道它在这里失败了,因为我仔细地调试了它,看到它在我的java类中命中了实现Spring批处理的
ItemWriter
saveAll()方法后,它进入了
JDKDDynamicApproxy类中的
公共对象调用(对象代理,方法方法方法,对象[]参数)
方法,在库代码中执行了一个难以理解的巨大奇怪循环之后,最终抛出了一个异常

我还调试了我的旧应用程序,当它在
spring-boot-starter-1.5.9
上运行时,正在运行,正如我前面所述,我发现当它到达
public Object invoke()
方法(我上面提到过)时,它返回一个实体的ArrayList(这是正确的)要在数据库命中该方法内的这行代码时写入数据库,请执行以下操作:

public Object invoke(Object proxy, Method method, Object[] args) {
   // code here...

   // this is where I notice a difference in return type from the "working" code vs. "broken 
   // code"
    retVal = invocation.proceed();

  // more code here...

  Object var12 = retVal;
  return var12;
然而当我调试新迁移的代码(升级到spring 2.X.X/5.X.X)时,我看到它返回一个
DefaultTransactionStatus@14037
对象,这显然是错误的。然后它进入受保护的TransactionSpectSupport.TransactionInfo CreateTransactionIfEssential()中
spring-tx
库中的
transactionspectsupport
类中的
方法。然后,它将在
invoke
方法中的
retVal
变量等于
null
,并且它将在一个圆圈中的相同代码部分上开始循环多次。它将具有
txInfo
设置为
传播需要新的、隔离的、可序列化的
。我可以点击IntelliJ中的“单步进入”按钮,它将让我一步一步地通过。它就像一个无限循环

我不知道该发布什么,或者这里是否有任何线索。我搜索了一下,发现其他人也有类似的问题,它似乎围绕(可能)事务管理器或实体管理器,以及bean是如何在配置类中设置的

我尝试了我读到的所有东西,但没有任何效果。我不是Spring Batch或Spring的专家,所以我可能错过了一些东西

我还注意到,在调试我的工作代码时,它有一个变量
Target=SimpleJpaRepository@11243
并且它有一些属性,比如提供者的数组列表

 Em = Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@6f2b608e]
 Provider = HIBERNATE
 org.hibernate.Session [0]
 org.hibernate.jpa.HibernateEntityManager [1]
 org.hibernate.ejb.HibernateEntityManager [2]
奇怪的是,当我调试我的“坏”代码时,它似乎只有
org.hibernate.jpa.HibernateEntityManager
在这个变量的列表中


如果有人能告诉我是否有一些线索指向某些东西,我将不胜感激。我真的认为这是一个Bean配置、实体管理器/事务问题,但我不是专家,所以我不确定。起初我认为这是一个依赖性问题,但在上了谷歌之后,我改变了主意。

你似乎在使用Hibernate以持久化数据。您将Spring Batch配置为使用哪个事务管理器?请共享您的配置,以便能够以高效的方式帮助您,请参阅。我将在此处更新配置代码
我将在此处更新配置代码
:这不是我看到的,您创建了另外两个几乎重复的问题ns:,。这些都与升级项目的同一问题有关。到处散布细节是没有效率的。