【问题标题】:Spring Boot with Hibernate APPLICATION FAILED TO START带有休眠应用程序的 Spring Boot 无法启动
【发布时间】:2021-02-22 23:23:16
【问题描述】:

当我启动我的 Spring Boot 应用程序时,我明白了:

2020-11-11 03:02:24.333 WARN 20648 --- [main] ConfigServletWebServerApplicationContext:上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“org”的 bean 时出错.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration':通过构造函数参数0表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] 中定义名称为“dataSource”的 bean 创建时出错:通过工厂方法进行 Bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [com.zaxxer.hikari.HikariDataSource]:工厂方法 'dataSource' 抛出异常;嵌套异常是 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: 无法确定合适的驱动程序类 2020-11-11 03:02:24.335 INFO 20648 --- [main] o.apache.catalina.core.StandardService:停止服务 [Tomcat] 2020-11-11 03:02:24.486 INFO 20648 --- [主要] ConditionEvaluationReportLoggingListener:

启动 ApplicationContext 时出错。要显示条件报告,请在启用“调试”的情况下重新运行您的应用程序。 2020-11-11 03:02:24.489 错误 20648 --- [main] o.s.b.d.LoggingFailureAnalysisReporter:


应用程序启动失败


说明:

配置数据源失败:未指定“url”属性,无法配置嵌入式数据源。

原因:无法确定合适的驱动程序类

行动:

考虑以下几点: 如果您想要一个嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径中。 如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有激活的配置文件)。

我的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>Netcracker-teamproject-2020</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.3.5.RELEASE</version>
            <scope>compile</scope>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.5.RELEASE</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>9.1.0.jre11-preview</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>9.0.10</version>
        </dependency>

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.23.1-GA</version>
        </dependency>

    </dependencies>

</project>

你能告诉我我该怎么做才能解决这个问题吗?

【问题讨论】:

    标签: java spring spring-boot hibernate


    【解决方案1】:

    我终于解决了,只是添加

    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
    

    到 Spring Boot application.properties

    【讨论】:

      【解决方案2】:

      只需使用 application.properties 文件设置数据源 url

      spring:
          datasource:
              url: 'jdbc:mssql://localhost:5432/dbname'
              username: username
              password: password 
      

      【讨论】:

      • 应该就是这样!
      【解决方案3】:

      这可能是由多种原因造成的。在您的情况下,我看到您选择了 JDBC 连接“&lt;artifactId&gt;mssql-jdbc&lt;/artifactId&gt;”,而不是 Hikara 连接池。

      Spring boot 2+ 默认使用 HikaraCP。因此,HikariCp 的依赖关系在“由 spring 自动配置调用”的类路径上。要解决此问题,您可以尝试排除 Hikari 数据源,方法是将以下内容添加到您的 pom.xml。

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jdbc</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>com.zaxxer</groupId>
                  <artifactId>HikariCP</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      

      解决方案 2 是不使用 JDBC“数据源类型”,使用 Hikara。示例 Hikari 配置道具。

      ###
      # HikariCP Properties
      ###
      
      spring.datasource.hikari.connection-timeout=60000
      spring.datasource.hikari.maximum-pool-size=200
      spring.datasource.hikari.minimum-idle=30
      spring.datasource.hikari.idle-timeout=3000
      spring.datasource.hikari.poolName=HikariCP
      spring.datasource.type=com.zaxxer.hikari.HikariDataSource
      
      
      
      spring.datasource.hikari.jdbcUrl=**data source url**
      spring.datasource.hikari.username=**username**
      spring.datasource.hikari.password=**password**
      spring.datasource.hikari.driverClassName=com.mssqlOrSomethingElse.jdbc.Driver
      

      【讨论】:

      • 我已经完成了你给我的所有提示,遗憾的是,没有任何改变......
      • 而且,无论我在 pom.xml、HibernateConfig 文件中改变什么,还是使用 Hikari,结果都是一样的
      【解决方案4】:

      我的配置文件:

      package com.projectparty.config;
      
      import org.springframework.boot.jdbc.DataSourceBuilder;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.orm.hibernate5.HibernateTransactionManager;
      import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
      import org.springframework.transaction.PlatformTransactionManager;
      import org.springframework.transaction.annotation.EnableTransactionManagement;
      
      import javax.sql.DataSource;
      import java.util.Properties;
      
      @Configuration
      @EnableTransactionManagement
      public class HibernateConfig {
      
          @Bean
          public DataSource dataSource() {
              return DataSourceBuilder.create()
                      .driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
                      .url("jdbc:sqlserver://127.0.0.1:51264")
                      .username("admin")
                      .password("admin")
                      .build();
          }
      
      
          @Bean
          public LocalSessionFactoryBean sessionFactory() {
              LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
              sessionFactory.setDataSource(dataSource());
              sessionFactory.setHibernateProperties(hibernateProperties());
      
              return sessionFactory;
          }
      
          @Bean
          public PlatformTransactionManager hibernateTransactionManager() {
              HibernateTransactionManager transactionManager
                      = new HibernateTransactionManager();
              transactionManager.setSessionFactory(sessionFactory().getObject());
      
              return transactionManager;
          }
      
          private Properties hibernateProperties() {
              Properties hibernateProperties = new Properties();
              hibernateProperties.setProperty(
                      "hibernate.hbm2ddl.auto", "update");
              hibernateProperties.setProperty(
                      "hibernate.dialect", "org.hibernate.SQLServerDialect");
      
              return hibernateProperties;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-08-21
        • 2016-03-21
        • 1970-01-01
        • 2015-05-10
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多