首页 > 解决方案 > 在 Spring Batch 中,由于 SQL SERVER,处理时间很慢,即使它只在 application.yml 中定义

问题描述

我有一个简单的弹簧批处理应用程序。

如果我将 H2 用于 DB - 将其添加到 .pom 并清除 application.yml,应用程序将在 8 秒内处理 50,000 条记录。当我说进程时,我的意思是只计算调用扩展 ItemProcessor 的类的时间,而扩展 ItemWriter 的大多数类都被注释掉(未调用)。

如果我想使用 SQL Server,我将其添加到 .pom:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc</artifactId>
    <version>6.0.0</version>
</dependency>

并像这样定义application.yml:

spring:
  profiles:
    active: dev

---

spring:
  devtools:
    add-properties: false
  profiles: dev
  datasource:
    url: jdbc:sqlserver://***.restest.bank:***;DatabaseName=****;integratedSecurity=true
    driver_class_name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    hikari:
#      maximum-pool-size: 50
#      connection-test-query: SELECT 1
#      validation-timeout: 30000
#      minimum-idle: 5
#      max-lifetime: 300
  jpa:
    database: SQL_SERVER
    database-platform: org.hibernate.dialect.SQLServerDialect
    show-sql: false
    hibernate:
      ddl-auto: update
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties:
      hibernate:
      default_schema: dbo
      default_catalog: ****
  batch:
    initialize-schema: always

该应用程序运行非常缓慢!处理相同的记录需要 700 秒,即使扩展 ItemWriter 的大部分类都被注释掉了!

为什么?

更新:现在我看到即使我不写入数据库,spring 也会写入表 BATCH_JOB_*。

这可能是应用程序这么慢的原因吗?因为它这么慢是不合理的!

标签: javasql-serverspring-batch

解决方案


即使没有在数据库中插入任何东西 - 春天也这样做了。并且它插入到数据库中的表 BATCH_* 真的很慢。使用答案在内存表中创建后 - 现在工作正常。


推荐阅读