无法通过Spring Batch + Spring Boot + SQL Server应用程序运行DDL脚本

时间:2018-09-01 23:45:34

标签: spring spring-mvc spring-boot spring-data-jpa spring-batch

我的项目有此要求,即用户上传一个CSV文件,该文件必须被推送到sql server数据库。 我正在按照下面的基本示例将CSV文件加载到sql服务器数据库中。 https://github.com/michaelcgood/Spring-Batch-CSV-Example 通过更改数据源来运行此存储库,这里我们使用sql server代替内存数据库。

这是POM文件的附加内容:

<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
<</dependency>

applications.properties文件的添加

spring.datasource.url=jdbc:sqlserver://localhost;databaseName=springbootdb
spring.datasource.username=sa
spring.datasource.password=Projects@123

以下是在运行代码库时生成的错误,我们找不到确切的根本原因,我们尝试了google中提到的多种方法,但是没有运气,而在运行这个我们面临的spring batch + spring boot 2.0.4应用程序时以下错误:

    spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
o.s.boot.autoconfigure.jdbc.Datasource.initailizer disabled(not running DDL scripts)

at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE
 where JOB_NAME = ? order by JOB_INSTANCE_ID desc]; nested exception is java.sql.SQLServerException: Invalid object name 'BATCH_JOB_INSTANCE'.

我们假设是以下原因之一?

1。我们正在使用spring starter项目创建spring批处理配置,因此不知道我们如何定义默认的表模式和全部。

2。也许我们没有访问权限,并且/或者您需要定义架构。 http://forum.spring.io/forum/spring-projects/batch/63771-badsqlgrammarexception-running-commandlinejobrunner

3。不确定为什么会说不正确的对象名“ BATCH_JOB_INSTANCE”而不是对象吗? 用于为Spring Batch应用程序创建元数据表,在运行应用程序之前手动创建元数据表的sql查询的列表是什么?

4。我们正在努力寻找问题的根本原因,请尝试采取上述github代码示例作为建议。 这里的任何帮助将不胜感激。如果我们错过了这里,请告诉我们。提前谢谢

1 个答案:

答案 0 :(得分:1)

您要链接的项目使用内存中的hsqldb实例,因此Spring Boot将自动为您创建Spring Batch元数据表。

如果您想使示例适应项目并使用sql server(未嵌入JVM),Spring Boot将创建Spring Batch表(除非您指示这样做) )。在这种情况下,您有两个选择:

  • 在运行应用

  • 之前对正在使用的数据库服务器运行Spring Batch DDL script for sqlserver
  • 或通过在application.properties文件中指定以下属性来指示Spring Boot为您完成此操作:

    spring.batch.initialize-schema=always spring.batch.schema=classpath:org/springframework/batch/core/schema-sqlserver.sql