当要连接的数据库不通的时候,怎么感知到,并走其他逻辑呢?

87 阅读1分钟

前言

这个是项目中遇到的一个问题,当连接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地址(目前只发现这一种情况会导致变慢)写错了,这个获取连接就会执行的很慢