Spring Boot和Hibernate:即使没有与数据库的连接,也要启动应用程序

时间:2016-12-06 22:46:12

标签: java spring hibernate spring-boot database-connection

我的Spring Boot应用程序需要连接到两个不同的数据库。第一个数据库(main)安装在与localhost应用程序相同的服务器上,而另一个数据库(辅助数据库)安装在远程服务器上,并不总是可用(用于维护,备份,测试等)。

我使用以下配置(application.properties)。

# main connection
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/?autoReconnect=true&verifyServerCertificate=false&useSSL=false&requireSSL=false
spring.datasource.username=emater
spring.datasource.password=emater

# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

# secondary connection
planejamento.datasource.driverClassName=com.mysql.jdbc.Driver
planejamento.datasource.url=jdbc:mysql://10.22.1.4/?verifyServerCertificate=false&useSSL=false&requireSSL=false
planejamento.datasource.username=emater
planejamento.datasource.password=emater
planejamento.datasource.testWhileIdle = false

#config hibernate
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQLSpatial56Dialect
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
spring.jpa.show-sql=true
spring.jpa.format-sql=true
spring.jpa.use-sql-comments=true
spring.jpa.hibernate.enable_lazy_load_no_trans=true

初始化应用程序时,hibernate尝试连接到两个数据库。如果当时第二个数据库不可用,则抛出异常并中止应用程序初始化。

我可以使用任何属性来阻止我的应用程序在启动时中止吗?

我该怎么办?

1 个答案:

答案 0 :(得分:1)

Hibernate需要在SessionFactory时连接到数据库,以便我可以从数据库DatabaseMetaData中提取Connection

使用DatabaseMetaData,需要找出:

  • 当前目录和架构
  • 如何限定标识符
  • 如果数据库支持临时表
  • 如果DDL导致事务提交
  • 如果驱动程序支持可滚动ResultSet
  • 如果驱动程序支持批量更新
  • 如果驱动程序返回为IDENTITY列生成的密钥

初始化SessionFactory时,此信息已解决,因此,当关联的数据库也可用时,您最好懒得开始新的MicroService。