【发布时间】:2019-12-16 06:35:25
【问题描述】:
问题:无法使用 CommandLineJobRunner 执行 spring 批处理作业,其中应用程序定义了自己的数据源和 Hibernate 配置。
错误消息(已提取) DatabaseLookup org.springframework.boot.autoconfigure.orm.jpa.DatabaseLookup getDatabase org.springframework.jdbc.support.MetaDataAccessException:无法获取用于提取元数据的连接;嵌套异常是 org.springframework.jdbc.CannotGetJdbcConnectionException: 获取 JDBC 连接失败;嵌套异常是 org.apache.commons.dbcp.SQLNestedException:无法创建 PoolableConnectionFactory ... 原因:org.hibernate.HibernateException:当 'hibernate.dialect' 未设置时,对 DialectResolutionInfo 的访问不能为空
关于批处理作业的一些信息: - SCDF 使用从 spring 网站下载的 docker-compose.yml 运行。 - /config 下的一些属性文件,这些文件内置在 jar 中,包括定义“hibernate.dialect=org.hibernate.dialect.MySQLDialect”的 Hibernate 配置文件 - 应用程序使用以下属性定义自己的数据源
qre.data.driverClassName=org.mariadb.jdbc.Driver
qre.data.url=jdbc:mysql://127.0.0.1:3306/dataflow
qre.data.username=root
qre.data.password=rootpw
- 带有导入这些属性的占位符定义的 XML 配置
-
jar 文件是使用 spring-boot-maven-plugin 构建的,将 org.springframework.batch.core.launch.support.CommandLineJobRunner 定义为 mainClass
org.springframework.boot spring-boot-maven 插件 a.b.c.MyCommandLineJobRunner
-
MyCommandLineJobRunner 扩展 Spring CommandLineJobRunner 并将作业名称和配置作为名称/值对传递
job.name=MYJOB
在本地“java -jar application.jar job.name=MYJOB”上成功运行jar
- 在 SCDF 上注册应用程序并创建任务。使用参数“job.name=MYJOB”运行任务 任务执行失败,出现上述错误
尝试搜索 SCDF 参考指南,但找不到任何有用的信息。 任何帮助表示赞赏。
【问题讨论】: