SpringBoot – мой проект использует базу данных в памяти, и я не знаю, как прекратить это делать и перейти на настоящую постоянную базу данных

Я создал проект Spring, используя базу данных h2 (в памяти), чтобы работать с ним, пока начинал работу над проектом. Теперь я хочу работать с постоянными данными по мере завершения моего проекта. Проблема в том, что я не могу переключиться и не вижу, в чем проблема. Это мои свойства application.properties:

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.

Если это действительно ваш application.properties, что за дополнительные пробелы в начале каждой строки? Убери это. ТАКЖЕ убедитесь, что он находится в правильном месте.

M. Deinum 10.05.2024 21:22
0
1
101
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы пытались удалить зависимость h2?

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

только что удалил зависимость h2. Теперь он говорит: Не удалось настроить источник данных: атрибут «url» не указан, и встроенный источник данных не может быть настроен. Причина: Не удалось определить подходящий класс драйвера.

Miguel Angel Guaita 11.05.2024 10:21

Вы пробовали проверку, о которой вам говорит господин Дейнум?

Max 11.05.2024 11:13

Да, есть, но я обнаружил, что даже новые весенние проекты не работают на моем компьютере, я не знаю, почему.

Miguel Angel Guaita 11.05.2024 11:23

потому что вам нужно их настроить. конфигурации меняются в зависимости от версии Java и Spring-Boot. какую версию Spring Boot и Java вы используете? 3.2.2 с Java 17? Используете ли вы intelliJ в качестве идеи? Из того, что я прочитал в файле свойств, я понимаю, что вы хотите использовать базу данных MySQL? правильный? ты установил его локально?

Max 11.05.2024 13:57

1 . Только что удалены зависимости h2 maven из вашего файла pom.xml.

   <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
  1. удалить Spring.h2.console.enabled=true из файла application.properties

Вы добавили зависимость базы данных h2 в файл pom.xml. 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

Проблемы, как говорилось в некоторых ответах, заключались в зависимости h2.

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

Решением было избавиться от этого.

Вы также можете изменить область действия зависимости h2 на «тестовую», если случайно захотите использовать ее в целях тестирования.

Другие вопросы по теме