春季云任务多个数据源的问题
Posted
技术标签:
【中文标题】春季云任务多个数据源的问题【英文标题】:Issue with spring cloud task mutiple datasources 【发布时间】:2019-05-18 14:42:49 【问题描述】:我按照 spring 示例的指南在我的应用程序中配置了两个数据源:https://github.com/spring-cloud/spring-cloud-task/blob/master/spring-cloud-task-samples/multiple-datasources。 我使用的spring boot版本是:2.0.0.RELEASE 我使用的spring.cloud.task.version是:1.2.2.RELEASE。
此应用程序在我的本地计算机上运行良好,但是当部署到 AWS 时,我收到以下错误,定义类:CustomTaskConfigurer.java。 与此处定义相同:https://github.com/spring-cloud/spring-cloud-task/blob/master/spring-cloud-task-samples/multiple-datasources/src/main/java/io/spring/configuration/CustomTaskConfigurer.java
错误信息如下:
例外是 org.springframework.beans.factory.BeanCreationException:创建名为 'org.springframework.cloud.task.configuration.SimpleTaskConfiguration' 的 bean 时出错:调用 init 方法失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建文件 [/home/vcap/app/BOOT-INF/classes/com/xxx/configuration/CustomTaskConfigurer.class] 中定义的名称为“customTaskConfigurer”的 bean 时出错:Bean通过构造函数实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [com.xxx.configuration.CustomTaskConfigurer$$EnhancerBySpringCGLIB$$bc80cd46]:构造函数抛出异常;嵌套异常是 java.lang.IllegalStateException: Unable to create a TaskExecutionDao。
【问题讨论】:
【参考方案1】:这个错误的根本原因是当我在本地开发应用程序时,我为 postgresql 配置了一个本地数据源 bean,如下所示: @豆角,扁豆 @基本的 @ConfigurationProperties("spring.datasource") 公共 HikariDataSource sourceDataSource() 返回 DataSourceBuilder.create().type(HikariDataSource.class).build();
此 bean 读取 application.properties 文件中的属性,这些属性标识本地 postgres 的用户名和密码 url。 当此应用程序部署到云端时,它将连接到云端数据库而不是本地数据库,这意味着 url、用户名和密码不再正确。 添加云配置后,此错误消失了。
但是这个异常堆栈跟踪只告诉你它无法创建taskExecutionDao,当用户看到这样的错误消息时真的很难解决这个问题
【讨论】:
【参考方案2】:如果是多数据源问题,您可以尝试将其标记为@Primary。提供更好的堆栈跟踪很有帮助。
【讨论】:
以上是关于春季云任务多个数据源的问题的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法 MySQLMaxValueIncrementer 在春季批处理中连接到多个数据源
具有多个数据源的春季批处理junit。 spring data jpa无法将数据保存在内存数据库中