我按照春季示例的指南在应用中配置了两个数据源: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创建时出错。通过构造函数实例化失败;嵌套的异常是org.springframework.beans.BeanInstantiationException:无法实例化[com.xxx.configuration.CustomTaskConfigurer $$ EnhancerBySpringCGLIB $$ bc80cd46]:构造方法引发了异常;嵌套的异常是java.lang.IllegalStateException:无法创建TaskExecutionDao。
答案 0 :(得分:0)
此错误的根本原因是,当我在本地开发应用程序时,我为postgresql配置了本地数据源bean,如下所示: @豆角,扁豆 @主 @ConfigurationProperties(“ spring.datasource”) 公共HikariDataSource sourceDataSource(){ 返回DataSourceBuilder.create()。type(HikariDataSource.class).build(); }
此bean读取application.properties文件中的属性,这些属性标识本地postgres的用户名和密码url。 当此应用程序部署到云时,它将连接到云数据库而不是本地数据库,这意味着url,用户名和密码不再正确。 添加云配置后,此错误消失了。
但是此异常堆栈跟踪仅告诉您它无法创建taskExecutionDao,对于用户而言,看到此类错误消息确实很难解决问题
答案 1 :(得分:0)
如果是多个数据源问题,则可以尝试将其标记为@Primary。提供更好的堆栈跟踪很有帮助。