ashu
ashu

Reputation: 1347

Springboot postgres Failed to determine a suitable driver class

I am trying to develop web application using SpringBoot and Postgres Database. However, on connecting to the application, I am getting error "Failed to determine a suitable driver class" As per advise in older posts, I have tried using driver of different version of jdbc and also tried creating bean for NamedParameterJdbcTemplate manually. I also validated that libraries are present and is accessible from Java code and those are present in classpath. But its still giving the same issue. I am using gradle to import all jars into build path.

Here is the git repository for the code: https://github.com/ashubisht/sample-sbs.git

Gradle dependency code:

apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-websocket")
    compile("org.springframework.boot:spring-boot-starter-jdbc")
    //compile("org.postgresql:postgresql")
    compile("org.postgresql:postgresql:9.4-1206-jdbc42")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Code for building Bean

@Configuration
@PropertySource("classpath:application.properties")
public class Datasource {

    @Value("${db.driverClassName}")
    private String driverClass;
    @Value("${db.url}")
    private String url;
    @Value("${db.username}")
    private String username;
    @Value("${db.password}")
    private String password;

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate() throws Exception{
        System.out.println(driverClass+" "+ url+" "+username+" "+password);
        DriverManagerDataSource source = new DriverManagerDataSource();
        source.setDriverClassName(driverClass);
        source.setUrl(url);
        source.setUsername(username);
        source.setPassword(password);
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(source);
        return namedParameterJdbcTemplate;
    }
}

Here is application.properties

server.port=8086

#spring.datasource.driverClassName=org.postgresql.Driver
#spring.datasource.url= jdbc:postgresql://localhost:5432/testdb
#spring.datasource.username=postgres
#spring.datasource.password=password
#spring.datasource.platform=postgresql
#spring.jpa.hibernate.ddl-auto=create-drop

db.driverClassName=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/testdb
db.username=postgres
db.password=password

Upvotes: 23

Views: 128140

Answers (10)

Java Oracle
Java Oracle

Reputation: 1

Maybe help adding "local" in field Active profiles of Run/Debug Configurations

Upvotes: 0

Markus Stuppnig
Markus Stuppnig

Reputation: 1

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

@Configuration
public class JdbcConfig {

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.postgresql.Driver");
        dataSource.setUrl("jdbc:postgresql://localhost:5432/yourdatabase");
        dataSource.setUsername("username");
        dataSource.setPassword("yourpassword");
        return dataSource;
    }

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource) {
        return new NamedParameterJdbcTemplate(dataSource);
    }
}

This fixed it for me.

Upvotes: 0

AdmWinther
AdmWinther

Reputation: 21

In my case, I just had to add the dependancy in pom.xml, I thought that I have already added but it wasnt. Add this to the dependancy section of your pom.xml

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>

Upvotes: 0

doogan
doogan

Reputation: 11

Also, the problem could be because of lack of jdbc dependency in your project. If you use maven add to pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

Upvotes: 0

VenkiBuzzzzZ
VenkiBuzzzzZ

Reputation: 21

I got the same error. It happens when you install sts version 3. I found the solution to this problem by doing trial & error method. This error is occured due to the non-availability of the connection between Application Properties & the server. I got to know by changing the port number in the application Properties to 9090, later then while running the application the console showed the default port number 8080. Thus you should maven clean and maven build your Spring Boot Application. After the above step, you run your application normally as spring boot application, the database will get connected and the application will get started.

Upvotes: 1

Mihai Jalbă
Mihai Jalbă

Reputation: 21

Had the same problem. The solution for me was to change application.properties file extension into application.yml

Upvotes: 2

phancuongviet
phancuongviet

Reputation: 425

Please try it

spring.r2dbc.url=r2dbc:postgresql://ip:port/datafeed?currentSchema=user_management
spring.r2dbc.username=username
spring.r2dbc.password=12345
spring.r2dbc.driver=postgresql

Hope to help you!

Upvotes: 3

Abdulraqeeb M.
Abdulraqeeb M.

Reputation: 369

For me the issue was in a miss-spell for postgresSql

its only one s,

replace

  1. spring.datasource.url=jdbc:postgres://localhost:5432/databaseName
  2. spring.datasource.url=jdbc:postgressql://localhost:5432/databaseName

with
spring.datasource.url=jdbc:postgresql://localhost:5432/databaseName

also check the same thing on hibernate dialect,

replace PostgresSQLDialect with PostgreSQLDialect

Upvotes: 12

Kapil Gupta
Kapil Gupta

Reputation: 332

For me the error was

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 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).

and the issue was missing profile so I added the following in the classpath and it worked

spring.profiles.active=dev

Upvotes: 0

ashu
ashu

Reputation: 1347

The issue is resolved by creating two beans. Separate bean is created for DataSource and NamedParameterJdbcTemplate.

    @Bean
    public DataSource dataSource(){
        System.out.println(driverClass+" "+ url+" "+username+" "+password);
        DriverManagerDataSource source = new DriverManagerDataSource();
        source.setDriverClassName(driverClass);
        source.setUrl(url);
        source.setUsername(username);
        source.setPassword(password);
        return source;
    }

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate(){
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(this.dataSource());
        return namedParameterJdbcTemplate;
    }

Upvotes: 8

Related Questions