ham*_*ac5 2 spring spring-batch
当我尝试在 spring 批处理中使用我的作业处理器将我从 csv 文件恢复的一些数据保留在数据库中时,此错误出现在控制台中,对于我的 dao,我正在使用 hibernate
我已经尝试了 2 种方法但同样的问题!
第一的 :
Session session = factory.getCurrentSession();
session.saveOrUpdate(p);
Run Code Online (Sandbox Code Playgroud)
第二 :
Session session = factory.openSession();
session.beginTransaction();
session.save(p);
session.getTransaction().commit();
session.close();
Run Code Online (Sandbox Code Playgroud)
我的 spring xml 配置中的数据源:我所有的 spring xml 配置都在这里https://pastebin.com/RZPr1GKL
<bean name="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/yassir" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>tp.entities.Personne</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven />
Run Code Online (Sandbox Code Playgroud)
错误:javax.persistence.TransactionRequiredException:在 org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3450) 处没有正在进行事务,在 org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1418) 处.hibernate.internal.SessionImpl.flush(SessionImpl.java:1414) ...
当我们在 Spring Boot 项目注释中使用 Spring Batch 特别是 Tasklet 时,@EnableBatchProcessing将为它的默认表创建它自己的事务(Spring Batch Transactions)。因此,如果您想在应用程序表中执行任何插入、更新或删除(实际表执行CRUD)。我们必须明确提及JpaTransactionManager而不是默认的 Spring Batch 事务。
@Configuration
@EnableBatchProcessing
public class MyJob extends DefaultBatchConfigurer {
@Autowired
private DataSource dataSource;
@Bean
@Primary
public JpaTransactionManager jpaTransactionManager() {
final JpaTransactionManager tm = new JpaTransactionManager();
tm.setDataSource(dataSource);
return tm;
}
}
Run Code Online (Sandbox Code Playgroud)
@Primary是最重要的一个,否则将加载两个事务管理器。在你的工作中提及jpaTransactionManager()。
return stepBuilderFactory.get("stepOne")
.transactionManager(jpaTransactionManager())
.<DetailDTO,DetailDTO>chunk(100)
.reader(reportReader)
.processor(reportProcessor)
.writer(reportWriter)
.build();
Run Code Online (Sandbox Code Playgroud)
我得到的错误 - Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress。
如果这对您有用,请单击“投票”。
| 归档时间: |
|
| 查看次数: |
13913 次 |
| 最近记录: |