【发布时间】:2019-02-07 12:29:05
【问题描述】:
我的项目有这个要求,用户上传一个 CSV 文件,该文件必须被推送到 sql server 数据库。 我按照下面的基本示例将 CSV 文件加载到 sql server 数据库中。 https://github.com/michaelcgood/Spring-Batch-CSV-Example 通过更改数据源来运行这个 repo,这里我们使用 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
以下是运行代码库时产生的错误,我们无法找到确切的根本原因,我们尝试了谷歌中提到的多种方法但没有运气,同时运行我们面临的这个 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批处理应用程序创建元数据表的sql查询列表是什么,在运行应用程序之前手动创建它。
4.我们几天来一直在努力寻找问题的根本原因,请通过上述 github 代码库示例提出建议。 这里的任何帮助将不胜感激。如果我们在这里遗漏了什么,请告诉我们。提前致谢
【问题讨论】:
-
那么那些应该被执行的 DDL 脚本在哪里?
-
它不会创建表
BATCH_JOB_INSTANCE -
@jens 你能否解释一下你的答案,你的意思是 BATCH_JOB_INSTANCE 不是由我们的应用程序创建的?
-
您链接到的脚本不会创建表
BATCH_JOB_INSTANCE。您的应用程序失败并显示该表不存在的错误。我不明白为什么这种事件组合会导致标题中的问题:“未运行 DDL 脚本”。无论您的脚本是否被执行,我都不会创建有问题的表。
标签: spring spring-mvc spring-boot spring-data-jpa spring-batch