问题描述
我有一个springboot应用程序,它正在连接到Azure sql数据库。而且我想设置Azure sql Server的自动故障转移。
我在A区具有单个数据库(“ demo”)的主sql server1 ( server1.database.windows.net )。 然后,通过在区域B中为同一数据库创建一个辅助服务器2 ( server2.database.windows.net ),为服务器1设置自动故障转移组。>
当前使用以下JDBC连接字符串进行配置:
jdbc:sqlserver://<my-failover-group-name>:1433;database=demo;encrypt=true;trustServerCertificate=false;loginTimeout=30;applicationIntent=ReadWrite;
Hikari CP 具有能够使用上述连接字符串连接到我的主数据库的连接,但是当我在azure门户上进行手动故障转移时,数据库连接应自动重新连接到已成为现在是主要的,但我不断收到以下异常:-
com.microsoft.sqlserver.jdbc.sqlServerException: The connection is closed.
- mssql-jdbc版本:-8.2.2.jre8
- Springboot版本:-2.2.2。发布
解决方法
在application.properties文件中:
在username
属性中,您可以删除@server1
或@server2
。这样,当我们进行手动故障转移时,我们的spring-boot应用程序将自动连接到故障转移组,而不会出现错误。
我尝试了几次,都成功了。
logging.level.org.springframework.jdbc.core=DEBUG
spring.datasource.url=jdbc:sqlserver://<FailoverGroupname>.database.windows.net:1433;database=<DatabaseName>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=joseph
spring.datasource.password=***
spring.datasource.initialization-mode=always
更新: 我的application.property如下:
logging.level.org.springframework.jdbc.core=DEBUG
spring.datasource.url=jdbc:sqlserver://<FailoverGroupName>.database.windows.net:1433;database=<DatabaseName>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=joseph
spring.datasource.password=<password>
spring.datasource.initialization-mode=always
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1