Java 添加Jpa maven依赖项后无法运行spring启动应用程序

Java 添加Jpa maven依赖项后无法运行spring启动应用程序,java,spring,hibernate,maven,Java,Spring,Hibernate,Maven,我在heroku的基础上启动了一个spring boot应用程序 我正在运行postgres docker容器,应用程序可以正确连接到该容器。现在我想使用Hibernate(如下所示,但在添加Jpa依赖项时: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId&

我在heroku的基础上启动了一个spring boot应用程序

我正在运行postgres docker容器,应用程序可以正确连接到该容器。现在我想使用Hibernate(如下所示,但在添加Jpa依赖项时:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
我不理解这个错误,也找不到太多关于它的信息(或者我不理解)。有人建议我检查配置,尽管我不确定我会错过什么

以下是项目中的一些文件:

应用程序属性

########## Original config (Heroku template)
spring.datasource.url: jdbc:postgresql://localhost:5432/postgres?user=postgres&password=postgres
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=10

spring.thymeleaf.mode=HTML
logging.level.org.springframework=INFO
spring.profiles.active=production
server.port=${PORT:5000}
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://maven.apache.org/POM/4.0.0"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>java-getting-started</artifactId>
  <version>1.0</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.0.RELEASE</version>
    <relativePath/>
  </parent>
  <name>java-getting-started</name>

  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <webjars-bootstrap.version>4.1.3</webjars-bootstrap.version>
    <webjars-jquery-ui.version>1.12.1</webjars-jquery-ui.version>
    <webjars-jquery.version>3.3.1-1</webjars-jquery.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
      <exclusions>
        <exclusion>
            <groupId>nz.net.ultraq.thymeleaf</groupId>
            <artifactId>thymeleaf-layout-dialect</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
    </dependency>
    <dependency>
      <groupId>com.zaxxer</groupId>
      <artifactId>HikariCP</artifactId>
    </dependency>
    <dependency>
      <groupId>org.webjars</groupId>
      <artifactId>jquery</artifactId>
      <version>${webjars-jquery.version}</version>
    </dependency>
    <dependency>
      <groupId>org.webjars</groupId>
      <artifactId>jquery-ui</artifactId>
      <version>${webjars-jquery-ui.version}</version>
    </dependency>
    <dependency>
      <groupId>org.webjars</groupId>
      <artifactId>bootstrap</artifactId>
      <version>${webjars-bootstrap.version}</version>
    </dependency>
    <dependency>
    <groupId>org.webjars</groupId>
      <artifactId>webjars-locator</artifactId>
      <version>0.30</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
    </dependency>

    <!-- additional dependencies -->

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.6</version>
    </dependency>

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

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>build-info</goal>
            </goals>
            <configuration>
              <additionalProperties>
                <encoding.source>${project.build.sourceEncoding}</encoding.source>
                <encoding.reporting>${project.reporting.outputEncoding}</encoding.reporting>
                <java.source>${maven.compiler.source}</java.source>
                <java.target>${maven.compiler.target}</java.target>
              </additionalProperties>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
UserService.java

package com.example;

@Controller
@SpringBootApplication
public class Main {
    
    @Autowired
    private UserService userService;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Main.class, args);
    }

    @GetMapping(value = "/listUsers")
    @ResponseBody
    public String listUsers() {

        User user = this.userService.listUsers().stream().findFirst().orElse(null);
        return user != null ? user.getName() : "No user";
    }

}
@Service
public class UserService {

    @Autowired
    private DbService dbService;

    public List<User> listUsers() {

        StringBuilder fetchQuery = new StringBuilder();
        fetchQuery.append("SELECT * FROM user");

        System.out.println("Fetching with query : " + fetchQuery.toString());
        List<User> users = this.dbService.fetchUsers(fetchQuery.toString());

        return users;
    }

}

也许你应该再次查看Heroku教程。它说你必须在你的应用程序中添加一个配置bean!这意味着你至少需要一个带有@configuration的类。教程中的配置bean如下所示:

package com.example.demo;

import com.zaxxer.hikari.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import javax.sql.DataSource;

@Configuration
public class DatabaseConfig {

  @Value("${spring.datasource.url}")
  private String dbUrl;

  @Bean
  public DataSource dataSource() {
      HikariConfig config = new HikariConfig();
      config.setJdbcUrl(dbUrl);
      return new HikariDataSource(config);
  }
}

也许你应该再次查看Heroku教程。它说你必须在你的应用程序中添加一个配置bean!这意味着你至少需要一个带有@configuration的类。教程中的配置bean如下所示:

package com.example.demo;

import com.zaxxer.hikari.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import javax.sql.DataSource;

@Configuration
public class DatabaseConfig {

  @Value("${spring.datasource.url}")
  private String dbUrl;

  @Bean
  public DataSource dataSource() {
      HikariConfig config = new HikariConfig();
      config.setJdbcUrl(dbUrl);
      return new HikariDataSource(config);
  }
}

@JavaConfig将配置注释类用作bean定义的源。您需要创建配置类并在其中提供方法dataSource(),以创建bean

 @Configuration
public class DatabaseConfig {

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Bean
    public DataSource dataSource() throws SQLException {
        if (dbUrl == null || dbUrl.isEmpty()) {
            return new HikariDataSource();
        } else {
            HikariConfig config = new HikariConfig();
            config.setJdbcUrl(dbUrl);
            return new HikariDataSource(config);
        }
    }

}

有关更多信息,请参见

@配置注释类被JavaConfig用作bean定义的源。您需要创建配置类并在其中提供方法dataSource(),以创建bean

 @Configuration
public class DatabaseConfig {

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Bean
    public DataSource dataSource() throws SQLException {
        if (dbUrl == null || dbUrl.isEmpty()) {
            return new HikariDataSource();
        } else {
            HikariConfig config = new HikariConfig();
            config.setJdbcUrl(dbUrl);
            return new HikariDataSource(config);
        }
    }

}

有关更多信息,请参见

能否提供更多错误日志?@Giorgi Tsiklauri添加了完整堆栈跟踪(由于堆栈溢出限制,部分行被裁剪)你能为
UserService添加代码吗?
@SSK我已经添加了UserService类。现在请添加
DbService
类。一些依赖项无法解决。你能提供更多错误日志吗?@Giorgi Tsiklauri添加了完整堆栈跟踪(由于堆栈溢出限制,剪切了一些行)你能为
UserService添加代码吗?
@SSK我已经添加了UserService类现在请添加
DbService
类。一些依赖项无法解决..bean在
DbService.java
类中,这样可以吗?如果bean放在另一个单独的配置类中,我不知道有什么区别请检查t他的一个,然后bean在
DbService.java
类中,这样可以吗?我不知道如果bean放在另一个单独的配置类中会有什么区别检查这个类,那么您也可以在非配置类中使用
@bean
(尽管不推荐),它附带can CEVEAT(又名bean mode lite)。您也可以在非配置类中使用
@Bean
(尽管不推荐),并且它附带can CEVEAT(又名Bean mode lite)。
 @Configuration
public class DatabaseConfig {

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Bean
    public DataSource dataSource() throws SQLException {
        if (dbUrl == null || dbUrl.isEmpty()) {
            return new HikariDataSource();
        } else {
            HikariConfig config = new HikariConfig();
            config.setJdbcUrl(dbUrl);
            return new HikariDataSource(config);
        }
    }

}