【问题标题】:Spring config for connecting to Postgres. Need bean: 'org.flywaydb.core.internal.jdbc.JdbcTemplate'用于连接到 Postgres 的 Spring 配置。需要bean:'org.flywaydb.core.internal.jdbc.JdbcTemplate'
【发布时间】:2019-09-23 19:01:45
【问题描述】:

我在尝试运行我的 Spring 应用程序时遇到此错误。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-09-22 23:55:45.397 ERROR 36321 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.example.demo.dao.UserDataAccessService required a bean of type 'org.flywaydb.core.internal.jdbc.JdbcTemplate' that could not be found.


Action:

Consider defining a bean of type 'org.flywaydb.core.internal.jdbc.JdbcTemplate' in your configuration.

当我使用我的 fakeUserData 文件时,该应用程序可以工作。似乎存在依赖关系问题,但我已经仔细检查过,看起来依赖关系都在那里。

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
        </dependency>

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

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

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

app:
  datasource:
    jdbc-url: jdbc:postgresql://localhost:5432/springbootpostgresdb
    username: postgres
    password: password
    pool-size: 30

UserDataAccessService.java

package com.example.demo.dao;

import com.example.demo.model.User;
import org.flywaydb.core.internal.jdbc.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.sql.SQLException;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

@Repository("postgresql")
public class UserDataAccessService implements Userdao {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public UserDataAccessService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public int insertUser(UUID id, User user) {
        return 0;
    }

    @Override
    public int deleteUserById(UUID id) {
        return 0;
    }

    @Override
    public int updateUserById(UUID id, User user) {
        return 0;
    }

    @Override
    public Optional<User> selectUserById(UUID id) {
        return Optional.empty();
    }

    @Override
    public List<User> selectAllUsers() {
        final String sql = "SELECT id,name FROM userProfile";

        try {
            return jdbcTemplate.query(sql, (resultSet) -> {
                UUID id = UUID.fromString(resultSet.getString("id"));
                String name = resultSet.getString("name");
                return new User(id, name);
            });
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
}

PostgresDataSource.java

package com.example.demo.datasource;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class PostgresDataSource {

    @Bean
    @ConfigurationProperties("app.datasource")
    public HikariDataSource hikariDataSource() {
        return DataSourceBuilder
                .create()
                .type(HikariDataSource.class)
                .build();
    }
}

【问题讨论】:

  • 你有没有试过我给出的答案?

标签: spring postgresql spring-boot


【解决方案1】:

您好,我直接遇到了同样的问题。

问题是当你自动导入库时,有两个选项。 Flyway 或 Springframework。

如果你导入flyway,那么你就有这个问题。

import org.flywaydb.core.internal.jdbc.JdbcTemplate;

如果你导入 spriongwramework 一切正常

import org.springframework.jdbc.core.JdbcTemplate;

【讨论】:

    【解决方案2】:

    我发现了两个问题。

    1. 正如@stefic 所说,您应该修改您的导入 jdbcTemplate
    2. 您应该修改您的 jdbcTemplate 查询

    UserDataAccessService.java

    @Override
    public List<User> selectAllUsers() {
        final String sql = "SELECT id,name FROM userProfile";
    
        return jdbcTemplate.query(sql, (resultSet, i) -> {  // <----- add second parameter `i`
            UUID id = UUID.fromString(resultSet.getString("id"));
            String name = resultSet.getString("name");
            return new User(id, name);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 2017-09-11
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      相关资源
      最近更新 更多