【问题标题】:springboot 2.3.0 while connecting to h2 database连接到h2数据库时的spring boot 2.3.0
【发布时间】:2020-09-03 23:49:18
【问题描述】:

在 Springboot 2.3.0.RELEASE 在控制台中连接到 h2 数据库时出现以下错误

找不到数据库“mem:testdb”,请预先创建或允许远程 数据库创建(不推荐在安全环境中使用)[90149-200] 90149/90149

【问题讨论】:

  • 你能告诉我们以 jdbc: 开头的完整字符串吗?你似乎做对了,但也许是错字?它应该是: jdbc:h2:mem:test_mem ,它告诉你它是一个远程数据库的事实是可疑的。
  • 来自第三方项目的H2 Console由于安全原因不再允许创建数据库并显示此类错误消息,没有任何可疑之处。但是指定的 JDBC URL 应该指向应用程序创建的现有数据库。

标签: spring database spring-boot h2


【解决方案1】:

您可以通过像这样设置spring.datasource.url 属性来解决此问题:

spring.datasource.url=jdbc:h2:mem:testdb

在 Spring Boot 2.3.0-RELEASE 之前,这是默认设置,但我不确定它的设置位置。从 2.3.0-RELEASE 开始,架构看起来是随机生成的 GUID。

【讨论】:

  • 非常感谢查斯韦尔。在您的指导下工作正常。
【解决方案2】:

第 1 步。在 application.properties 中:

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb

第 2 步。启动您的 Spring Boot 应用并打开:

http://localhost:8080/h2-console/

如果您仍然遇到问题,请尝试将您在 application.properties jdbc:h2:mem:testdb 中提到的 URL 值粘贴到

JDBC URL of h2-console 

那么你就不会遇到下面提到的问题 未找到数据库 h2,预先创建或允许远程创建数据库(不推荐在安全环境中使用)[90149-200] 90149/90149(帮助)

【讨论】:

  • 我不明白,“尝试粘贴网址”,你能提供一个例子吗? h2-console 的 JDBC URL
  • @mattsmith5 op 可能意味着将 URL(jdbc:h2:mem:testdb) 粘贴到控制台的 JDBC URL 部分。
【解决方案3】:

实际上,您的 h2 数据库正在寻找一个名为 test.mv.db 的文件。但 该文件不在您的用户目录中。所以,它只是 打你一巴掌,让你在那个路径上预先创建它。

注意:这是我们的 H2 DB 存储我们所有信息的根文件。

  1. 在您的application.properties 文件中添加以下行
    spring.datasource.url = jdbc:h2:mem:testdb

  2. 转到您的用户目录,在我的例子中,它是 (C:\Users\subra)

  3. 创建一个名为test.mv.db 的新文件并将其保存在所有文件选项下,如下所示。

  4. 现在重新启动您的应用。

  5. 完成

参考截图:

我的问题:


结果

【讨论】:

  • 像@subramanian 的魅力一样工作。谢谢
【解决方案4】:

您无法连接到数据库,因为您使用的是旧的 JDBC URL。每次启动 Spring 项目时,JDBC URL 也会发生变化。

解决方案:每次要连接到数据库时,从控制台复制 JDBC URL。

【讨论】:

  • 是的,这是我的问题的主要原因。并且设置一个名字可以防止这个动作一次又一次地重复
【解决方案5】:

错误的另一个原因可能是缺少 JDBC 依赖项:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

我得到了完全相同的错误,这就是我的问题。

【讨论】:

  • 添加此依赖项后,我能够在应用程序日志中看到数据库 url。谢谢!
【解决方案6】:

在 Spring Boot 2.3.0 中,属性 spring.datasource.generate-unique-name 设置为 true。这样可以随机生成架构名称。

通过将其设置为 false,数据库会像以前的版本一样生成 (jdbc:h2:mem:testdb)。我觉得这种方式更可取,无需手动指定 URL。

【讨论】:

    【解决方案7】:

    在您的项目文件夹中创建一个扩展名为 .mv.db 的文件。确保文件名以 .mv.db 结尾,否则 H2 控制台无法识别该文件(我知道这没有意义,我无法解释原因:D)。创建文件后,将 jdbc:h2:./devdb 输入到 h2 控制台的 JDBC URL,如下所示:

    那你应该没事!

    【讨论】:

      【解决方案8】:

      步骤 1. 从这里下载 h2 数据库引擎:

      https://www.h2database.com/html/main.html

      第 2 步。在 application.properties 中:

      spring.h2.console.enabled=true

      spring.datasource.url=jdbc:h2:mem:testdb

      第 3 步。启动您的 Spring Boot 应用并打开:

      http://localhost:8080/h2-console/

      它一定适合你。

      【讨论】:

        【解决方案9】:

        从 2.3.0 开始,generate-unique-name 的默认值为 true

        您可以通过以下设置恢复到以前的行为:

        spring.datasource.generate-unique-name=false
        

        另请参阅:https://stackoverflow.com/a/62750194/4506703

        【讨论】:

          【解决方案10】:

          即使我在开始使用 h2 数据库学习数据持久性时也遇到了同样的错误。解决方案在控制台日志本身中。数据库名称是自动生成的,可以在 spring 日志中找到。错误背后的原因是从 2.3.0 版本开始,如果 URL 未提及其自动生成。

          这是包含数据库 URL 的日志消息: INFO 16096 --- [restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration:H2 控制台在“/h2-console”中可用。数据库位于 'jdbc:h2:mem:f1dfeade-60dd-4809-8978-42547353b2f3'

          【讨论】:

            【解决方案11】:

            如果这对任何人都有帮助。我的问题是因为我的 application.properties 中有这个

            spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
            

            不知道为什么我之前添加了这个配置。但是一旦取出来,它就解决了我的问题

            【讨论】:

              【解决方案12】:

              在旧版本 (1.4.192) 中使用 h2 依赖项。

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

              【讨论】:

                【解决方案13】:

                我在 spring 版本 2.3.0 中为 h2 数据库创建架构时遇到了同样的问题 ...有时数据库会连接但无法显示我的表结构,所以我尝试更改 spring 版本,它就像魔术一样工作尝试将 spring 版本更改为 2.1.15.RELEASAE

                【讨论】:

                  【解决方案14】:

                  我在 Windows 10 中遇到了同样的问题。尝试替换

                  spring.datasource.url=jdbc:h2:~/testdb
                  

                  spring.datasource.url=jdbc:h2:mem:testdb
                  

                  【讨论】:

                    【解决方案15】:

                    application.propertiesh2-console 的默认 JDBC url 替换为使用 JDBC Url=@ 987654321@ 下面是 application.properties

                    spring.datasource.url=jdbc:h2:mem:testdb
                    spring.datasource.driverClassName=org.h2.Driver
                    spring.datasource.username=user
                    spring.datasource.password=password
                    spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
                    spring.h2.console.enabled=true 
                    

                    【讨论】:

                      【解决方案16】:

                      application.property文件中添加这两个属性

                      spring.h2.console.enabled=true
                      spring.datasource.url=jdbc:h2:mem:testdb
                      

                      在浏览器中输入网址:localhost:&lt;portnumber&gt;/h2-console 您将获得一个重新分级登录数据库的页面 删除页面中现有的 JDBC url 并把这个jdbc:h2:mem:testdb

                      【讨论】:

                      【解决方案17】:

                      添加 Spring-boot 启动 JDBC 解决了我的问题。

                      https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc/2.5.2

                      <dependency>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-jdbc</artifactId>
                          <version>2.5.2</version>
                      </dependency>
                      

                      【讨论】:

                        【解决方案18】:

                        我通过jdbc:h2:mem:testdb 连接h2,但不是jdbc:h2:~/testdb

                        【讨论】:

                          【解决方案19】:

                          我遇到了同样的问题,我用这种方法解决了

                          1. 转到 application.properties
                          2. 添加以下内容:
                          spring.datasource.url=jdbc:h2:mem:testdb
                          spring.datasource.driverClassName=org.h2.Driver
                          spring.datasource.username=sa
                          spring.datasource.password=password
                          spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
                          

                          现在您可以使用 sa 作为用户名和密码作为 password

                          PS : 这通常是 Spring Boot 使用的默认配置

                          【讨论】:

                            【解决方案20】:

                            我将“test.mv.db”文件添加到“C:\Users\YourUserName”中,然后重新启动服务器就可以了。

                            【讨论】:

                              【解决方案21】:

                              将属性添加到application.properties

                              spring.datasource.generate-unique-name=false
                              

                              我也错过了将以下依赖项添加到pom.xml

                              <dependency>
                                  <groupId>org.springframework.boot</groupId>
                                  <artifactId>spring-boot-starter-jdbc</artifactId>
                              </dependency>
                                  
                              <dependency>
                                  <groupId>org.springframework.boot</groupId>
                                  <artifactId>spring-boot-starter-data-jpa</artifactId>
                              </dependency>
                              

                              【讨论】:

                                【解决方案22】:

                                我对这个问题的解决方案是:

                                如果您没有在主目录中创建数据库文件夹(在 Windows 下的:C:\Users*USERNAME\test* || in Linux : 在 ~/test) 下创建它并将以下行添加到 application.properties:

                                spring.jpa.hibernate.ddl-auto=create-drop
                                spring.datasource.url=jdbc:h2:~/test
                                spring.jpa.hibernate.ddl-auto=create-drop
                                

                                它应该可以帮助您登录。

                                ((H2使用空白用户名和密码))

                                【讨论】:

                                  【解决方案23】:

                                  请使用下面这个有效的解决方案。

                                  如果是Spring Boot项目,请在登录中将JDBC URLjdbc:h2:~/test修改为jdbc:h2:mem:testdb页面,即 Spring Boot 配置的默认 URL。

                                  【讨论】:

                                  猜你喜欢
                                  • 2019-12-26
                                  • 2021-01-06
                                  • 2020-08-12
                                  • 2018-12-21
                                  • 2018-10-10
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2021-05-14
                                  • 2019-09-06
                                  相关资源
                                  最近更新 更多