【问题标题】:Spring Batch Hibernate configuration error when execute on SCDF在 SCDF 上执行时 Spring Batch Hibernate 配置错误
【发布时间】: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 参考指南,但找不到任何有用的信息。 任何帮助表示赞赏。

【问题讨论】:

    标签: spring-cloud-dataflow


    【解决方案1】:

    我不确定为什么您的应用程序会尝试覆盖休眠方言属性,因为批处理应用程序仍需要使用 SCDF 的数据源。您可以使用属性spring.jpa.properties.hibernate.dialect 覆盖 SCDF 服务器的休眠方言。您可以在文档中看到其中一些示例 here

    【讨论】:

    • 感谢您对这个问题的支持。
    • 业务流程最终需要一个单独的数据源。但是,我目前正在尝试使用单个数据源进行测试。做了一些更改,发现现在 JDBC 连接似乎有问题。一件非常令人困惑的事情是 SCDF 在 docker-compose 中使用了以下配置。 - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/dataflow - SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.mariadb.jdbc.Driver
    【解决方案2】:

    在对配置进行了一些更改后,我认为 JDBC url 配置不正确。 将其更改为与 docker-compose.yml 中相同的值,

    - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/dataflow
    - SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.mariadb.jdbc.Driver
    

    然后可以成功运行作业。

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 2017-05-11
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 2020-08-12
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多