Проект Spring Boot не работает после переключения ПК

#java #spring #postgresql #spring-boot

Вопрос:

Я знаю, что есть похожие вопросы, но те немногие, которые я нашел и проверил в Google, похоже, никак мне не помогают. Итак, я переустановил Windows, а затем импортировал свой весенний проект обратно с Github. Проблема, которую я сразу увидел, заключается в моем 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 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>2.5.4</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>ValComp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ValComp</name>
<description>Composite value calculator.</description>
<properties>
    <java.version>16</java.version>
</properties>
 

Версия Java, которую я установил сейчас, составляет 17, поэтому я попытался поместить 17 в эту строку в файле, но в Project>Properties JRE 16 все еще упоминается, а 17 нигде не видно. Помимо этого, моя главная проблема заключается в том, что, когда я пытаюсь запустить его как приложение для загрузки Spring, я получаю следующую ошибку:

 [2m2021-10-13 20:35:18.867[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mcom.valcomp.ValCompApplication          [0;39m [2m:[0;39m No active profile set, falling back to default profiles: default
[2m2021-10-13 20:35:19.277[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36m.s.d.r.c.RepositoryConfigurationDelegate[0;39m [2m:[0;39m Bootstrapping Spring Data JPA repositories in DEFAULT mode.
[2m2021-10-13 20:35:19.286[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36m.s.d.r.c.RepositoryConfigurationDelegate[0;39m [2m:[0;39m Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
[2m2021-10-13 20:35:19.623[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port(s): 8080 (http)
[2m2021-10-13 20:35:19.630[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.apache.catalina.core.StandardService  [0;39m [2m:[0;39m Starting service [Tomcat]
[2m2021-10-13 20:35:19.630[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36morg.apache.catalina.core.StandardEngine [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/9.0.52]
[2m2021-10-13 20:35:19.720[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.a.c.c.C.[Tomcat].[localhost].[/]      [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext
[2m2021-10-13 20:35:19.720[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mw.s.c.ServletWebServerApplicationContext[0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 824 ms
[2m2021-10-13 20:35:19.850[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.hibernate.jpa.internal.util.LogHelper [0;39m [2m:[0;39m HHH000204: Processing PersistenceUnitInfo [name: default]
[2m2021-10-13 20:35:19.888[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36morg.hibernate.Version                   [0;39m [2m:[0;39m HHH000412: Hibernate ORM core version 5.4.32.Final
[2m2021-10-13 20:35:19.987[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.hibernate.annotations.common.Version  [0;39m [2m:[0;39m HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
[2m2021-10-13 20:35:20.063[0;39m [32m INFO[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mcom.zaxxer.hikari.HikariDataSource      [0;39m [2m:[0;39m HikariPool-1 - Starting...
[2m2021-10-13 20:35:21.182[0;39m [31mERROR[0;39m [35m11792[0;39m [2m---[0;39m [2m[           main][0;39m [36mcom.zaxxer.hikari.pool.HikariPool       [0;39m [2m:[0;39m HikariPool-1 - Exception during pool initialization.

org.postgresql.util.PSQLException: FATAL: database "valholder" does not exist
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2552) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2664) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:147) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:273) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:223) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.Driver.makeConnection(Driver.java:465) ~[postgresql-42.2.23.jar:42.2.23]
    at org.postgresql.Driver.connect(Driver.java:264) ~[postgresql-42.2.23.jar:42.2.23]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
 

что ОЧЕНЬ странно, так как код работал до обновления, и предполагается, что он сам создаст эту базу данных. Вот мое application.properties досье:

 spring.datasource.url=jdbc:postgresql://localhost:5432/valholder
spring.datasource.username=postgres
spring.datasource.password=slur123~
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.format_sql=true

server.error.include-message=always
 

Кстати, учетные данные для входа из файла работают в оболочке SQL, так что проблема не в этом. Я бы предпочел не начинать новый проект с нуля и запустить этот, так как это 1). научит меня справляться с такими проблемами; 2). обеспечьте некоторую непрерывность Github. 🙂

Любые идеи смиренно приветствуются.

Комментарии:

1. Возможно, это очевидный вопрос, но valholder существует ли он на самом деле? Вы создали резервную копию перед переустановкой и восстановили ее впоследствии (или, по крайней мере, заново создали, если она автоматически заполняется вашим приложением)?

2. Насколько я понимаю (я новичок в Spring и управлении SQL), база данных удаляется и создается при запуске приложения, поэтому в ней нет необходимости…? Позвольте мне еще раз проверить…

Ответ №1:

предполагается, что он сам создаст эту базу данных

Вероятно, на самом деле это не предназначено для создания реальной базы данных, а для создания всех таблиц и так далее (с помощью Hibernate и hibernate.ddl-auto ).

По общему признанию, вы используете имя пользователя postgres , поэтому оно также потенциально может создать базу данных, но потребуется специальный механизм, прежде чем ваш источник данных будет инициализирован этим URL-адресом JDBC (поскольку он содержит имя базы данных и попытается подключить его изначально).

Такой дополнительный механизм возможен, но маловероятен. (Этот механизм, вероятно, должен был бы предположить, что postgres база данных обслуживания используется для начального подключения JDBC, не связанного с источником данных вашего приложения, создайте базу данных оттуда и только затем повторно подключитесь к URL-адресу JDBC, который у вас есть для инициализации источника данных.)

Вашим решением было бы создать свою базу данных заранее (например, с psql помощью или pgAdmin). Также может быть лучше использовать пользователя, не являющегося администратором: просто создайте другого пользователя и сделайте его владельцем этой новой базы данных. (Если вы создадите этого пользователя с помощью pgAdmin, не забудьте включить «Может войти», который, я не уверен, включен по умолчанию.)

Комментарии:

1. Вы, мой прекрасный сэр, просто гений! Действительно, база данных должна быть предварительно создана, прежде чем пытаться подключиться к ней и удалить ее. Большое спасибо! 🙂