gpt4 book ai didi

java - Spring Data JPA 批处理中的 CannotCreateTransactionException

转载 作者:行者123 更新时间:2023-11-29 16:14:52 24 4
gpt4 key购买 nike

我正在尝试处理 MySQL DB1 的大约 1000 万条记录,然后将它们保存到 MySQL DB2

我使用大约 50 个线程来实现此目的。生产者从以下位置获取 500 条记录MySQL DB1 一次,然后将它们放入队列中。大约 50 个消费者将处理它们,然后插入到 MySQL DB2 中。

在大多数情况下,它工作得很好。但对于大约 5 万条记录,它失败了。

分析日志后,我发现抛出了CannotCreateTransactionException:

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.TransactionException: JDBC begin transaction failed:
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:450) ~[spring-orm-5.0.9.RELEASE.jar!/:5.0.9.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378) ~[spring-tx-5.0.9.RELEASE.jar!/:5.0.9.RELEASE]

这个网站上有一些类似的问题,我已经尝试过其中一些:

  1. MyRepository.saveAll()抛出异常后重试5次

  2. BasicDataSource 与更大的 maxActivesetValidationQuerysetTestOnBorrow 结合使用:

    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setMaxActive(100);
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("***");
    dataSource.setUsername("***");
    dataSource.setPassword("***");
    dataSource.setTestOnBorrow(true);
    dataSource.setValidationQuery("SELECT 1");
    dataSource.setMaxActive(30);

还是不行。我该如何解决这个问题?

最佳答案

我进行了很多搜索并尝试了不同的解决方案。

最后,将我的配置更改为此后,异常不再显示:

@Bean
public DataSource poiDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setMaxActive(100);
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("**");
dataSource.setUsername("**");
dataSource.setPassword("**");
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery("SELECT 1");
dataSource.setMaxActive(30);
dataSource.setRemoveAbandoned(true);
dataSource.setMaxWait(60000);
dataSource.setTimeBetweenEvictionRunsMillis(300000);
dataSource.setMinEvictableIdleTimeMillis(300000);
dataSource.setTestWhileIdle(true);
dataSource.setLogAbandoned(true);
return dataSource;
}

关于java - Spring Data JPA 批处理中的 CannotCreateTransactionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54918641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com