为什么没有h2就不能使用JPA

问题描述 投票:0回答:2

我刚开始学习Spring,有一些东西不太清楚。 我的 pom 是这样完成的:

<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>3.0.4</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>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

当我启动应用程序时,抛出以下错误:


应用程序无法启动

描述:

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

原因:未能确定合适的驱动程序类别

行动:

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


如果我添加此依赖项:


        <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>

然后应用程序就可以运行了

我想了解 Jpa 是否需要 h2 才能工作,因为在许多示例中我看到通常不会添加此依赖项来使应用程序工作。

spring spring-boot jpa h2
2个回答
0
投票

我检查了项目属性 --> Java 构建路径 --> 源(选项卡)--> 构建路径上的源文件夹 我注意到,在项目属性 --> Java 构建路径 --> 源(选项卡) --> 构建路径上的源文件夹中,在 src/main/resources 中,排除的项目标记为 **。 我删除了它,现在一切正常。


0
投票

如果您使用 Spring starter 并且没有在 pom.xml 中指定任何特定数据库,那么 Spring Data 将为您配置默认的 H2(内存中)数据库。您不需要将 h2 工件放入 pom.xml 中。

但是在您的 pom.xml 中已经添加了 MySql 工件。在这种情况下,您必须告诉 Spring JPA 应该使用哪个数据库。例如,通过在 application.properties 中添加数据源详细信息。

如果您决定使用 MySQL,那么 pom.xml 中的工件将是:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

application.properties 中的数据源定义为:

spring.datasource.url=jdbc:mysql://localhost:3306/<some_db_name>
spring.datasource.username=<some_username>
spring.datasource.password=<some_password>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

要让 Spring Data 在启动期间从实体类创建/更新数据库,请使用以下属性:

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

如果您想从 DDL 脚本创建数据库并从脚本文件插入一些数据 - 请使用以下属性:

spring.jpa.hibernate.ddl-auto=none
spring.sql.init.mode=always

Spring 将使用位于类路径(默认)上的默认脚本 schema.sql 和 data.sql。更详细的 Spring 文档:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization.using-basic-sql-scripts

© www.soinside.com 2019 - 2024. All rights reserved.