关于此问题,我几乎已经采用了此处发布的所有解决方案,但没有任何效果。
我的 application.properties :
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?logger=com.mysql.jdbc.log.Slf4JLogger&rewriteBatchedStatements=true&profileSQL=true&autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.jdbc.batch_size = 100
spring.jpa.hibernate.order_inserts = true
spring.jpa.hibernate.order_updates = true
logging.level.root=info
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5p) %gray(%c{0}::%M) - %m%n
我的 EntityRepository :
@Repository
public interface EntityRepository extends CrudRepository<Entity, Long> { }
我的实体:
@Data @Entity
public class Entity {
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
private Long id;
private Long attr;
}
以及调用存储库的简化代码:
int batchSize = 100;
List<Entity> batchEntities = new ArrayList<>();
for(Entity entity : entities) {
batchEntities.add(entity);
if(batchEntities.size() >= batchSize) {
entityRepository.saveAll(batchEntities);
batchEntities.clear();
}
}
我所做的:
根据this SO question,我启用了profileSQL=true
选项,并且该日志会生成几个单独的插入内容。另外,我已经在SQL Server上启用了全局日志记录,它也会产生单个插入的序列。
根据this another SO question和yet another SO question,我已经确保在batch_size
文件中设置了application.properties
,尽管我没有亲子关系,但我也尝试使用order_inserts
和order_updates
。另外,我已经启用了rewriteBatchedStatements=true
选项并使用了saveAll(...)
方法。
我还尝试过在每次CrudRepository
持续执行后进行冲洗,以抛弃预制的batchSize
和自定义的东西。
以上无济于事。
答案 0 :(得分:1)
Spring Boot中不存在以下属性。
'scripts': {
'postinstall': 'rimraf node_modules/**/web.config'
}
要添加自定义属性,请使用spring.jpa.hibernate.jdbc.batch_size = 100
spring.jpa.hibernate.order_inserts = true
spring.jpa.hibernate.order_updates = true
前缀。
spring.jpa.properties
应该做到这一点。
另请参阅how to configure JPA上的Spring Boot文档。