Sql server SQLServerException:连接已关闭,并且在故障转移后不会自动重新连接到辅助数据库
我有一个springboot应用程序,它正在连接Azure SQL数据库。我想设置Azure SQL Server的自动故障切换 我在区域A中有主sql server1(server1.database.windows.net)和一个db(“演示”)。 然后,通过在区域B中为同一数据库创建辅助服务器2(server2.database.windows.net),为服务器1设置自动故障切换组 当前正在使用以下JDBC连接字符串进行配置:Sql server SQLServerException:连接已关闭,并且在故障转移后不会自动重新连接到辅助数据库,sql-server,spring-boot,azure-sql-database,hikaricp,mssql-jdbc,Sql Server,Spring Boot,Azure Sql Database,Hikaricp,Mssql Jdbc,我有一个springboot应用程序,它正在连接Azure SQL数据库。我想设置Azure SQL Server的自动故障切换 我在区域A中有主sql server1(server1.database.windows.net)和一个db(“演示”)。 然后,通过在区域B中为同一数据库创建辅助服务器2(server2.database.windows.net),为服务器1设置自动故障切换组 当前正在使用以下JDBC连接字符串进行配置: jdbc:sqlserver://<my-failov
jdbc:sqlserver://<my-failover-group-name>:1433;database=demo;encrypt=true;trustServerCertificate=false;loginTimeout=30;applicationIntent=ReadWrite;
- mssql jdbc版本:-8.2.2.jre8
- Springboot版本:-2.2.2.1版本
- 在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
logging.level.org.springframework.jdbc.core=DEBUG
spring.datasource.url=jdbc:sqlserver://.database.windows.net:1433;数据库=;加密=真;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=joseph
spring.datasource.password=***
spring.datasource.initialization mode=始终
更新: 我的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
logging.level.org.springframework.jdbc.core=DEBUG
spring.datasource.url=jdbc:sqlserver://.database.windows.net:1433;数据库=;加密=真;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=joseph
spring.datasource.password=
spring.datasource.initialization mode=始终
#Hikari将使用以上加上以下设置连接池
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超时=30000
spring.datasource.hikari.pool name=datebookhikarip
spring.datasource.hikari.max life=1800000
spring.datasource.hikari.connection timeout=30000
spring.datasource.hikari.connection测试查询=选择1
当我启动应用程序时,它会显示:
当我手动执行故障切换时,它显示:
我已经读了你以前的帖子。我还有springboot应用程序和故障转移组,我在两台db服务器之间创建了相同的用户名和密码。当我在azure portal上进行手动故障切换时,我的springboot应用程序将自动连接到db服务器。因此,我建议使用相同的用户名和密码来解决此问题。连接到故障转移组就像连接到一台db服务器,而将其他事情留给它。@JosephXu,这两台服务器的用户名和密码都相同。只是主服务器和辅助服务器的服务器名称不同。最后的用户名是user@server1及user@server2分别地当发生故障转移时,我能够使用DB client连接上述故障转移组。只是,一旦我进行故障切换,到DB的连接就会给我SQLErrorException,表示连接已关闭。这些连接未修复,无法连接到最新的服务器。请更改'user@server1“还有”user@server2'仅为'用户'。它工作得很好。@Joseph Xu,刚刚尝试了两台服务器的单用户“演示”,它不允许我连接,并且在发生故障转移时给出相同的异常。你有别的建议吗。这可能是Hikari CP错误还是任何配置错误?Xu,我尝试使用连接字符串中的故障转移组名称为这两台服务器创建一个用户演示,结果是相同的。但当发生故障转移时,它仍然不允许我通过应用程序连接。这可能是一个Hikaricp配置错误。我正在使用连接到故障转移组。Xu,感谢您的帮助,但这似乎是另一个问题。我“当我发现问题时,我将更新答案。您好,我的意思是,您可以尝试使用Spring数据连接到故障转移组,根据。Hikari CP是Spring Boot中的默认数据库连接池。请查看我的更新答案。Xu,应用程序默认使用Hikari。无论何时发生故障转移,它都会导致断管写入失败,然后不刷新连接,从而导致连接关闭。你能分享hikari的配置吗
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