Spring boot обнаруживает ошибку подключения mongodb, расположенную в другом модуле maven (MongoSocketOpenException)

У меня есть проект на java под названием: lydsam.
Первый модуль называется: bd, это мое соединение с моей базой данных.

@Configuration
public class ConnectionBD {

    @Bean
    public MongoDatabaseFactory mongoDatabaseFactory(){
        return new SimpleMongoClientDatabaseFactory("mongodb://localhost:27017/lydsam");
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        try{
            return new MongoTemplate(mongoDatabaseFactory());
        }catch(Exception e){
            System.out.println("offline with mongodb");
            System.out.println(e.getMessage());
            return null;
        }
    }
}

и у меня есть еще один модуль с именем: продажи

@SpringBootApplication(scanBasePackages = { "org.lydsam.sales",
            "org.lydsam.bd" })
public class Sales_aplicacion {

    public static void main(String[] args) {
        try {
            SpringApplication.run(Sales_aplicacion.class, args);
        } catch (Exception e) {
            System.out.println("Error executing in application 'Sales': " + e.getMessage());
        }
    }
}

Все работает нормально, когда я запускаю приложение, я хотел бы поймать ошибку, когда я отключу свою базу данных, а затем показать ее на консоли с сообщением.
Я попытался использовать try catch, но у меня это не сработало, и я получаю следующую ошибку.

com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.0.3.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-4.0.3.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-4.0.3.jar:na]
at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: java.net.ConnectException: Connection refused: no further information
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:339) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:603) ~[na:na]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:63) ~[mongodb-driver-core-4.0.3.jar:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.0.3.jar:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.0.3.jar:na]
... 3 common frames omitted  

Пожалуйста, мне нужна помощь.


person Daniel    schedule 26.08.2020    source источник
comment
Ваша цель — корректно завершить работу вашего приложения, когда база данных не работает. Правильный?   -  person Dinesh Dontha    schedule 27.08.2020
comment
@DineshDontha Да, правильно, но я хочу отобразить на консоли сообщение о том, что моя база данных отключена.   -  person Daniel    schedule 27.08.2020
comment
Я попытался провести анализ. Как правило, MongoDB в режиме реального времени будет обеспечивать высокую доступность с несколькими экземплярами с балансировкой нагрузки между ними. Итак, я ничего не нашел о том, как ловить/обрабатывать такие исключения SocketException, которые происходят во время выполнения. На данный момент я думаю, что это не будет обработано. Кто-то должен помочь в этом.   -  person Dinesh Dontha    schedule 27.08.2020


Ответы (1)


Оберните свой код с помощью try catch для MongoTimeoutException. Вы можете найти более подробную информацию в моем другом ответе

person s7vr    schedule 29.08.2020