Springboot postgres无法确定合适的驱动程序类

时间:2018-07-18 13:59:06

标签: postgresql gradle jdbc

我正在尝试使用SpringBoot和Postgres数据库开发Web应用程序。但是,在连接到应用程序时,出现错误“无法确定合适的驱动程序类” 按照旧文章中的建议,我尝试使用不同版本的jdbc的驱动程序,还尝试手动为NamedParameterJdbcTemplate创建bean。我还验证了存在库并且可以从Java代码访问这些库,并且这些库也存在于classpath中。但是它仍然给同样的问题。 我正在使用gradle将所有jar导入构建路径。

这是代码的git存储库: https://github.com/ashubisht/sample-sbs.git

等级依赖代码:

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'
}

用于构建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;
    }
}

这是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

4 个答案:

答案 0 :(得分:3)

通过创建两个bean解决了该问题。为DataSource和NamedParameterJdbcTemplate创建了单独的bean。

    @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;
    }

答案 1 :(得分:1)

对我来说,问题在于 postgresSql 的拼写错误

它只有一个,

替换

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


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

也在hibernate方言上检查同样的事情,

替换PostgresSQLDialect PostgreSQLDialect

答案 2 :(得分:0)

花了一段时间之后,我意识到我已经在应用程序包之外创建了Datasource类。检查这可能有帮助。

答案 3 :(得分:0)

对我来说,错误是

无法配置数据源:未指定'url'属性,并且无法配置任何嵌入式数据源。 原因:无法确定合适的驱动程序类别

操作: 考虑以下: 如果您需要嵌入式数据库(H2,HSQL或Derby),请输入 它在类路径上。 如果您要从特定的配置文件中加载数据库设置,则可能需要激活它(当前没有配置文件处于活动状态)。

,该问题缺少个人资料 所以我在类路径中添加了以下内容,它起作用了

spring.profiles.active = dev