我一直在使用部署在Heroku上的Spring Boot应用程序,但我偶然发现了一个我无法找到解决方案的错误。
我尝试按照Heroku教程(link)连接到Postgres数据库但是我一遍又一遍地得到这个错误:
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException:
Failed to instantiate [javax.sql.DataSource]:
Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: No supported DataSource type found
这是我使用的配置文件:
spring.datasource.url=${JDBC_DATABASE_URL}
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.removeAbandoned=true
和DatabaseConfig类:
@Configuration
public class DatabaseConfig {
@Bean @Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create()
.build();
}
}
任何人都可以指出我正确的方向。我做错了什么?
答案 0 :(得分:1)
我遇到了同样的问题,并设法解决了这个问题。该问题并非特定于Heroku,因为它可以通过在本地运行应用程序以及使用相同的配置进行复制。
根据堆栈跟踪,很明显在类路径中找不到DataSource。根据找到here的Spring Boot文档,您可以自动使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa 获取 tomcat-jdbc ,这似乎是Spring Boot中的首选。
我在pom.xml中添加了以下依赖项,解决了这个问题:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>