前言
这个是项目中遇到的一个问题,当连接postgre数据库不通的时候(连接失败),就连接本地数据库,从本地数据库中查询数据,或者执行一段新的业务逻辑(不知道大家有没有碰到过这些奇奇怪怪的问题嘞)
下面我来分享下怎么解决的吧
很简单,获取下连接就可以了,连接通了,就是true,反之false,通过这个进行判断
就是依靠下面这个方法了
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.sql.DriverManager;
@Slf4j
@Component
public class TestConnectUtils {
// 例:
jdbc:postgresql://xx.xxx.xx.xx:5432/aa
@Value("${spring.datasource.dynamic.datasource.postgre.url}")
private String url;
// 数据库用户名
@Value("${spring.datasource.dynamic.datasource.postgre.username}")
private String username;
// 数据库密码
@Value("${spring.datasource.dynamic.datasource.postgre.password}")
private String password;
// 例:com.alibaba.druid.pool.DruidDataSource
@Value("${spring.datasource.dynamic.datasource.postgre.type}")
private String type;
/**
* 测试postgre数据库是否连接
*
* @return
*/
public Boolean postgreIsConnected() {
try {
Class.forName(type).newInstance();
DriverManager.getConnection(url, username, password);
} catch (Exception e) {
return false;
}
return true;
}
}
然后问题就解决了,通过方法返回值来判断自己需要走哪一段逻辑
可以会有的小伙伴忧虑效率问题,本人亲测如果是数据库关闭之类的操作,返回速度是毫秒级别的,很快就可以感知到是否可连接,如果ip地址(目前只发现这一种情况会导致变慢)写错了,这个获取连接就会执行的很慢