SpringBoot - 我的项目正在使用内存中的数据库,我不知道如何停止这样做并更改为实际的持久数据库

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

我已经使用 h2 数据库(在内存中)创建了一个 Spring 项目,以便在我开始该项目时使用它。现在,我想在项目完成后使用持久数据。问题是,我无法切换,我不知道问题出在哪里。这些是我的应用程序属性:

spring.application.name=picoopspring

#Database
spring.datasource.url=jdbc:mysql://localhost:3306/picoopspring
spring.datasource.username=johndoe
spring.datasource.password=johndoe
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.defer-datasource-initialization=true
spring.jpa.show-sql=true
  
spring.jpa.hibernate.ddl-auto=update

spring.h2.console.enabled=true

这是我的pom.xml:


    <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>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>8.0.0.Final</version>
        </dependency>

        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>3.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>5.11.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.5</version>
        </dependency>

    </dependencies>

我 我在 mysql 中创建了数据库,上面没有表。日志是下一个:

2024-05-10T19:41:43.115+02:00  INFO 15620 --- [           main] project.picoop.PicoopApplication         : No active profile set, falling back to 1 default profile: "default"

2024-05-10T19:41:44.320+02:00  INFO 15620 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.

2024-05-10T19:41:44.370+02:00  INFO 15620 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 44 ms. Found 3 JPA repository interfaces.

2024-05-10T19:41:45.180+02:00  INFO 15620 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)

2024-05-10T19:41:45.200+02:00  INFO 15620 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]

2024-05-10T19:41:45.200+02:00  INFO 15620 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.19]

2024-05-10T19:41:45.316+02:00  INFO 15620 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext

2024-05-10T19:41:45.319+02:00  INFO 15620 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2146 ms

2024-05-10T19:41:45.469+02:00  INFO 15620 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...

2024-05-10T19:41:45.734+02:00  INFO 15620 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:7f78d327-0c69-4c8a-8962-3481c091e42a user=SA

2024-05-10T19:41:45.735+02:00  INFO 15620 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

2024-05-10T19:41:45.804+02:00  INFO 15620 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]

2024-05-10T19:41:46.035+02:00  INFO 15620 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.4.4.Final

2024-05-10T19:41:46.140+02:00  INFO 15620 --- [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled

2024-05-10T19:41:46.465+02:00  INFO 15620 --- [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer

2024-05-10T19:41:47.242+02:00  INFO 15620 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)

2024-05-10T19:41:47.281+02:00  INFO 15620 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'

2024-05-10T19:41:47.602+02:00  INFO 15620 --- [           main] o.s.d.j.r.query.QueryEnhancerFactory     : Hibernate is in classpath; If applicable, HQL parser will be used.

2024-05-10T19:41:48.668+02:00  WARN 15620 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

2024-05-10T19:41:49.894+02:00  INFO 15620 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@19cc697c, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@33012e6f, org.springframework.security.web.context.SecurityContextHolderFilter@d88d9d7, org.springframework.security.web.header.HeaderWriterFilter@7280785f, org.springframework.web.filter.CorsFilter@7593716d, org.springframework.security.web.authentication.logout.LogoutFilter@37bafef8, project.picoop.auth.JWTAuthFilter@592fbd8, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5d38758a, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4acae4c7, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4086e003, org.springframework.security.web.session.SessionManagementFilter@1b12c870, org.springframework.security.web.access.ExceptionTranslationFilter@7c2d4398, org.springframework.security.web.access.intercept.AuthorizationFilter@75bbeb89]

2024-05-10T19:41:50.443+02:00  INFO 15620 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''

2024-05-10T19:41:50.458+02:00  INFO 15620 --- [           main] project.picoop.PicoopApplication         : Started PicoopApplication in 7.706 seconds (process running for 8.105)

据我了解,此日志表示数据库是在 Spring 项目内存中创建的: 2024-05-10T19:41:45.734+02:00 INFO 15620 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - 添加连接 conn0: url=jdbc:h2:mem:7f78d327-0c69 -4c8a-8962-3481c091e42a 用户=SA

我在这里做错了什么?

如果它有效,SA是我第一次启动应用程序时给出的名称,所以我想,从那时起application.properties就没有被读取过。路由文件是:src/main/resources/application.properties

spring spring-boot hibernate h2 application.properties
4个回答
0
投票

您是否尝试过删除 h2 依赖项?

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

0
投票

如果您使用 Springboot 3,您的配置中不需要 hibernate.dialect,Hibernate 6 会为您做到这一点。

(可以指定您使用的数据库吗)


0
投票

1 .刚刚从 pom.xml 文件中删除了 h2 maven 依赖项。

   <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
  1. 从 application.properties 文件中删除 spring.h2.console.enabled=true

0
投票

您在 pom.xml 文件中添加了 h2 数据库 依赖项。 H2 是一个内存数据库,请删除该依赖项,它将正常工作。

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

同时删除属性

spring.h2.console.enabled=true
,因为不需要它。您可以使用以下属性进行标准 SQL 查询并记录值

spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type=trace
© www.soinside.com 2019 - 2024. All rights reserved.