如何在不依赖数据库的情况下启动spring-boot应用程序?

2023-12-11

我的应用程序使用“Spring-boot + Hibernate4 + mysql”。作为其中的一部分,我有一个要求,即使数据库关闭,我的 sprint-boot 应用程序也应该能够启动。目前,当我尝试在数据库未启动的情况下启动我的 Spring Boot 应用程序时,它会给出以下异常。

我研究了很多,发现这个异常与hibernate.temp.use_jdbc_metadata_defaults财产。

我尝试在 Spring Boot 的“application.yml”中设置此属性,但此属性的值在运行时并未反映。

异常堆栈跟踪:

2014-05-25 04:09:43.193  INFO 59755 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
2014-05-25 04:09:43.250  WARN 59755 --- [           main] o.h.e.jdbc.internal.JdbcServicesImpl     : HHH000342: Could not obtain connection to query metadata : Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2014-05-25 04:09:43.263  INFO 59755 --- [           main] o.apache.catalina.core.StandardService   : Stopping service Tomcat

Error starting ApplicationContext. To display the auto-configuration report enabled debug logging (start with --debug)


Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:120)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:648)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:909)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:898)
    at admin.Application.main(Application.java:36)
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:205)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:399)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:150)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 15 more

应用程序.yml:

spring:   
  jpa:
show-sql: true
hibernate:
  ddl-auto: none
  naming_strategy: org.hibernate.cfg.DefaultNamingStrategy
  temp:
    use_jdbc_metadata_defaults: false

这确实是一个很难破解的难题。

经过大量的研究并实际调试 spring-boot、spring、hibernate、tomcat pool 等才能完成。

我确实认为这将为尝试实现此类要求的人们节省大量时间。

以下是实现以下要求所需的设置

  1. 即使数据库关闭或没有数据库,Spring Boot 应用程序也能正常启动。
  2. 当数据库启动时,应用程序将即时获取连接,这意味着无需重新启动 Web 服务器或重新部署应用程序。
  3. 如果数据库从运行状态下降并再次出现,则无需启动 tomcat 或重新部署应用程序。

应用程序.yml:

spring:
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/schema
    username: root
    password: root
    continueOnError: true
    initialize: false
    initialSize: 0
    timeBetweenEvictionRunsMillis: 5000
    minEvictableIdleTimeMillis: 5000
    minIdle: 0

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: none
      naming_strategy: org.hibernate.cfg.DefaultNamingStrategy
    properties:
      hibernate:   
        dialect: org.hibernate.dialect.MySQL5Dialect
        hbm2ddl:
          auto: none
        temp:
          use_jdbc_metadata_defaults: false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不依赖数据库的情况下启动spring-boot应用程序? 的相关文章

随机推荐

  • MySQL 全连接? [复制]

    这个问题在这里已经有答案了 以下是我的查询 我想要如下所示的结果 我怎样才能在 mysql 中做到这一点 SELECT Persons LastName Persons FirstName Orders OrderNo FROM Perso
  • 缩放时 CSS 边框宽度一致

    我有一台 4K 显示器 Windows 缩放设置为 150 Chrome 缩放设置为 100 在我正在使用 Bootstrap 4 5 2 开发的网站上 这会导致 Chrome 显示粗细不一致的表格边框 请注意以下屏幕截图中 有两组 4 条
  • JasperReport 大小限制

    有没有办法对 JasperReport 的大小设置限制 我们刚刚查看了 WebSphere 6 1 Heapdump 有人尝试创建一个报告 堆中内存为 1 5GB 它让我们的 Websphere 服务器崩溃了 谢谢 时间 我不熟悉 Jasp
  • IE8 中 jQuery 生成的复选框的值存储为“on”而不是实际值?

    以下示例代码在 FireFox 中可以运行 但 IE 会导致问题 此代码本质上根据 JSON 数组呈现动态复选框列表 当我尝试提交变量时 复选框的值存储为 on 我注意到有一个额外的属性被渲染 仅限 IE 称为 jQuery12886311
  • 无法在 Android 9,10 Xamarin 上获取媒体播放器声音

    我在 android 8 及更低版本上使用此代码 但在 Android 版本 9 上它不起作用 MediaPlayer player3 player3 new MediaPlayer player3 SetDataSource url pl
  • SQL Azure 中的连接超时

    我在我的 azure asp net 网站中使用 SQL Azure 有时 sql aerver 连接不会打开 我会看到此异常消息 本地和实时站点上 连接超时已过期 登录后阶段超时时间已过 在等待服务器完成登录过程并响应时 连接可能超时 或
  • 子进程库不会执行 compgen

    我正在尝试列出我的 linux Lubuntu 机器上可用的每个命令 我想在 Python 中进一步处理该列表 通常要在控制台中列出命令 我会编写 compgen c 它将把结果打印到标准输出 我想使用 Python 子进程库执行该命令 但
  • 如何在 Express 4 Web 应用程序中跨多个路由使用单个 mssql 连接池?

    我想用节点 MSSQL作为 Node JS Express 4 Web 应用程序中的 MSSQL 数据库连接器 路由处理程序逻辑在单独的文件中处理 如何创建单个 全局连接池并在处理路由逻辑的多个文件中使用它 我不想在每个路由处理程序函数 文
  • 如何配置我的服务器以提供 MPMoviePlayerViewController 的视频文件播放?

    我想使用 MPMoviePlayerViewController 播放服务器上的视频文件 但它不起作用 我的iOS代码如下 NSURL mediaURL NSURL alloc initWithString NSString alloc i
  • 如何使用 iText 将文本插入点跳过到下一列?

    我正在使用 iText java lib 创建 3 列布局 最大的问题是 第一列中的文本可能少于第二列中的文本 或者第二列中的第三列文本可能少于第三列中的文本 所以我需要将插入点移动到下一列 我尝试使用 nextColumn 方法 该方法应
  • Rails:使用 will_paginate 进行复杂的关联查找

    我在进行复杂查找时遇到 will paginate 问题 photo has many tags through gt tagships item has many photos photo belongs to item photos i
  • 获取最近三个用户的所有操作

    我有一个历史记录表 用于存储用户在延期帖子上执行的所有操作 id post id action user id 1 5 1 3 2 6 4 1 3 6 4 4 4 7 2 6 5 7 3 2 6 5 2 3 7 4 5 3 我想要的是让最后
  • UITableView numberOfSectionsInTableView 和 numberOfRowsInSection 在初始加载时调用三次

    我正在做一个REALLY BASIC UITableView项目没有任何数据源 我只是在第一个也是唯一一个单元格上显示 1 I am returning 1同时numberOfSectionsInTableView and numberOf
  • 前面的双冒号“::”是什么意思?

    我在一个类中找到了这行代码 我必须修改它 Configuration tmpCo m configurationDB pointer to current db 我不知道类名前面的双冒号到底意味着什么 没有它我会读 声明tmpCo作为指向该
  • java中如何拦截方法

    方法如下 public static boolean startModule Module mod ServletContext servletContext boolean delayContextRefresh 这是java文件中的方法
  • 如何使用seaborn Factorplot更改图形大小

    pylab inline import pandas as pd import numpy as np import matplotlib as mpl import seaborn as sns typessns pd DataFrame
  • NSDecimalNumber 的数学完整性

    我使用的是除以 10 30 的数字 我可能会添加诸如 1000000000000000 和 5000000000000000 之类的值存储在NSDecimalNumbers 我担心的是 我想我已经见过几次 在添加或减去这些值时 所做的数学运
  • SQL Server 中的嵌套 select 语句

    为什么以下不起作用 SELECT name FROM SELECT name FROM agentinformation 我想我对 SQL 的理解是错误的 因为我认为这会返回与 SELECT name FROM agentinformati
  • 如何在 Famo.us 的界面之间滑动?

    使用以下 Famo us 示例代码添加 10 个以 100 宽度和高度垂直显示的表面 如何添加在它们之间滑动的功能 类似于 iOS 主屏幕上的滑动方式 define function require exports module var E
  • 如何在不依赖数据库的情况下启动spring-boot应用程序?

    我的应用程序使用 Spring boot Hibernate4 mysql 作为其中的一部分 我有一个要求 即使数据库关闭 我的 sprint boot 应用程序也应该能够启动 目前 当我尝试在数据库未启动的情况下启动我的 Spring B