Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring boot fails to load DataSource using PostgreSQL driver

I have successfully developed a prototype using Spring Boot 1.0.2.RELEASE (was 1.0.1.RELEASE until today).

I have searched and searched and tried solutions like: Spring Boot jdbc datasource autoconfiguration fails on standalone tomcat Spring Boot / Spring Data import.sql doesn't run Spring-Boot-1.0.0.RC1

They all suggests to let Spring Boot do the job. When using H2, everything works, but when I try to switch to PostgreSQL, i get:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(org.springframework.orm.jpa.JpaVendorAdapter)] threw exception; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined 

My build.gradle is as follow:

loadConfiguration()  def loadConfiguration() { def environment = hasProperty('env') ? env : 'dev' project.ext.envrionment = environment println "Environment is set to $environment"  def configFile = file('config.groovy') def config = new ConfigSlurper("$environment").parse(configFile.toURL()) project.ext.config = config }  buildscript { ext {     springBootVersion = '1.0.2.RELEASE' } repositories {     mavenCentral() } dependencies {     classpath("org.springframework.boot:spring-boot-gradle-   plugin:${springBootVersion}") } }  apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'war' apply plugin: 'groovy'  war { baseName = 'test' version =  '0.0.1-SNAPSHOT' }  configurations { providedRuntime }  repositories { mavenCentral() }  dependencies { compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}") compile("org.springframework.boot:spring-boot-starter-thymeleaf:${springBootVersion}")  compile("org.springframework.boot:spring-boot-starter-jdbc:${springBootVersion}") compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}") compile("postgresql:postgresql:9.1-901.jdbc4") //compile("com.h2database:h2")  testCompile("org.springframework.boot:spring-boot-starter-test:${springBootVersion}")  }  task wrapper(type: Wrapper) { gradleVersion = '1.11' } 

application.properties:

spring.jpa.database=POSTGRESQL spring.jpa.show-sql=false spring.jpa.hibernate.ddl-auto=update  spring.database.driverClassName=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost/cms spring.datasource.username=cms spring.datasource.password=NA 

Removing application.properties and changing the dependency back to H2 and everything is OK.

I can't find where I am doing wrong :-(

like image 320
mamruoc Avatar asked Apr 25 '14 08:04

mamruoc


People also ask

How do you fix failed to determine a suitable driver class?

Error Message Reason: Failed to determine a suitable driver class Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

How do I connect to Postgres using spring boot?

Using PostgreSQL in Spring Boot Also, we can use JPA of spring data to connect the database of PostgreSQL. Also, we need to add the JDBC driver dependency of the PostgreSQL database to allow the spring boot application to connect or talk with the PostgreSQL database server.

Does Postgres have JDBC driver?

JDBC is a core API of Java 1.1 and later. It provides a standard set of interfaces to SQL -compliant databases. PostgreSQL provides a type 4 JDBC driver.


2 Answers

Where did this come from: database.driverClassName=org.postgresql.Driver? Don't you mean spring.datasource.driverClassName?

like image 88
Dave Syer Avatar answered Oct 08 '22 19:10

Dave Syer


spring.datasource.driver-class-name=org.postgresql.Driver 

Make sure to reload your project if you recently just added postgres to your dependencies.

like image 22
Jat Torres Avatar answered Oct 08 '22 19:10

Jat Torres