簡體   English   中英

帶有 Hibernate 應用程序的 Spring Boot 啟動失敗

[英]Spring Boot with Hibernate APPLICATION FAILED TO START

當我啟動 Spring Boot 應用程序時,我得到了:

2020-11-11 03:02:24.333 WARN 20648 --- [main] ConfigServletWebServerApplicationContext:上下文初始化期間遇到異常 - 取消刷新嘗試:org.springframework.beans.factory.UnsatisfiedDependencyException:創建名為“org.springframework”的 bean 時出錯。 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 --- [main] ConditionEvaluationReportLoggingListener :

啟動 ApplicationContext 時出錯。 要顯示條件報告,請在啟用“調試”的情況下重新運行您的應用程序。 2020-11-11 03:02:24.489 錯誤 20648 --- [主要] osbdLoggingFailureAnalysisReporter:


應用程序無法啟動


描述:

無法配置數據源:未指定“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>

你能告訴我我該怎么做才能解決這個問題嗎?

只需使用 application.properties 文件設置數據源 url

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

我終於解決了這個問題,只需添加

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

到 Spring Boot application.properties

我的配置文件:

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

這可能是由多種原因造成的。 在您的情況下,我看到您選擇了 JDBC 連接“ <artifactId>mssql-jdbc</artifactId> ”,而不是 Hikara 連接池。

Spring boot 2+ 默認使用 HikaraCP。 因此,HikariCp 的依賴項位於“由 spring 自動配置調用”的類路徑上。 要解決此問題,您可以嘗試通過將以下內容添加到 pom.xml 來排除 Hikari 數據源。

<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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM