数据库访问问题抛出什么异常
我正在使用带有 springboot 的 SQL Server 数据库。
我想处理数据库访问问题(如果数据库由于某种原因无法访问,我想捕获抛出的异常)。
在我的本地环境中,我使用此映像“mcr.microsoft.com/mssql/server:2019-latest”中的 Docker SQL Server 数据库。当在查询之前数据库无法访问时,我得到 JDBCConnectionException
在我的 preprod 环境中,令我惊讶的是,我得到了异常 SqlServerException。 我的本地环境和 preprod env 之间的唯一区别是:
- 在本地我使用 SQL Server Docker 容器(因此为了模拟数据库访问问题,我停止容器)
- ,在 preprod env 中,我在 cloudfoundry 中使用 Azure SQL 数据库。所以我只是从我的应用程序中解除数据库绑定来模拟数据库访问问题。
那么我可能会捕获什么异常来确保处理数据库无法访问的问题?
@Service
public class MyService {
@Autowired
Repository repository;
public void getDataFromBd(){
try {
repository.findAllData();
} catch (JDBCConnectionException e) {
log.error("The database is inaccessible");
processDatabaseInaccessible(e);
}
}
}
I m using a SQL Server database with springboot.
I want to handle database access issue (if the database becomes inaccessible for some reason, I want to catch the exception thrown).
In my local environment I'm using Docker SQL Server database from this image 'mcr.microsoft.com/mssql/server:2019-latest'. And when the database is inaccessible just before my query, I get the JDBCConnectionException
In my preprod environment, to my great surprise, I get the exception SqlServerException.
The only differences between my local and preprod env are:
- in local I use SQL Server Docker container (so to simulate database access issue, I stop the container)
- in preprod env, I'm using Azure SQL database in cloudfoundry. So I just unbind the database from my app to simulate database access issue.
So what exception might I catch to be sure to handle database inaccessible issue?
@Service
public class MyService {
@Autowired
Repository repository;
public void getDataFromBd(){
try {
repository.findAllData();
} catch (JDBCConnectionException e) {
log.error("The database is inaccessible");
processDatabaseInaccessible(e);
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于与不同 SQL 实例的连接会引发不同的异常,因此为每个实例设置一个 catch 块是有意义的:
就个人而言,我还会在其中放置一个通用异常 catch 块。
Since connections to different SQL instances are throwing different exceptions it makes sense to have a
catch
block for each:Personally I'd also put a generic exception catch block in there as well.