切换 PC 后 Spring 启动项目不起作用



我知道也有类似的问题,但我从谷歌上找到的几个问题似乎对我没有任何帮助。所以,我重新安装了Windows,然后从Github导入了我的Spring项目。我直接看到的一个问题是在我的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 Shell中工作,所以这不是问题。我不想从零开始一个新项目,让这个项目运行起来,因为它会教会我如何处理这些问题;2).有一些Github连续性。:)

欢迎大家提出意见。

它应该自己创建数据库

它实际上可能不是要创建实际的数据库,而是要创建所有的表等等(使用Hibernate和hibernate.ddl-auto)。

不可否认,您正在使用的用户名是postgres,因此它也可能创建数据库,但是在使用JDBC URL初始化您的数据源之前需要有一个特殊的机制(因为它包含数据库名称并将尝试最初连接它)。

有可能有这样一个额外的机制,但不太可能。(该机制可能必须假设postgres维护数据库用于与应用程序数据源无关的初始JDBC连接,从那里创建数据库,然后重新连接用于初始化数据源的JDBC URL。)

你的解决方案是提前创建你的数据库(例如使用psql或pgAdmin)。使用非管理员用户可能是更好的做法:只需创建一个不同的用户,并将其设置为新数据库的所有者。(如果您使用pgAdmin创建该用户,请记住启用"可以登录",我不确定默认情况下是否启用。)

最新更新