有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Hibernate应用程序的java Spring启动失败

当我启动Spring Boot应用程序时,我发现:

2020-11-11 03:02:24.333警告20648---[main]ConfigServletWebServerApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatifiedPendencyException:创建名为“org”的bean时出错。springframework。靴子自动配置。奥姆。jpa。HibernateJpacConfiguration”:通过构造函数参数0表示的未满足的依赖项;嵌套的异常是org。springframework。豆。工厂BeanCreationException:创建在类路径资源[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]中定义的名为“dataSource”的bean时出错:通过工厂方法实例化bean失败;嵌套的异常是org。springframework。豆。BeanInstationException:未能实例化[com.zaxxer.hikari.HikariDataSource]:工厂方法“dataSource”引发异常;嵌套的异常是org。springframework。靴子自动配置。jdbc。DataSourceProperties$DataSourceBeanCreationException:无法确定合适的驱动程序类 2020-11-11 03:02:24.335信息20648---[main]阿帕奇。卡塔琳娜。果心标准服务:停止服务[Tomcat] 2020-11-11 03:02:24.486信息20648---[main]条件评估报告日志监听器:

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


应用程序无法启动


说明:

配置数据源失败:未指定“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>

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


共 (4) 个答案

  1. # 1 楼答案

    我最终解决了这个问题,只需添加

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

    到Spring引导应用程序。性质

  2. # 2 楼答案

    这可能是由多种原因造成的。在您的例子中,我看到您选择了JDBC连接“<artifactId>mssql-jdbc</artifactId>”,而不是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
    
  3. # 3 楼答案

    我的配置文件:

    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;
        }
    }
    
  4. # 4 楼答案

    只需使用应用程序。用于设置数据源url的属性文件

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