#java #spring-boot #oauth-2.0 #spring-data-cassandra
#java #spring-boot #oauth-2.0 #spring-data-cassandra
Вопрос:
Я реализовал приложение spring boot OAuth, которое запускается на сервере Tomcat и использует Cassandra в качестве базы данных. Когда сервер базы данных запущен, приложение развертывается и работает нормально. Проблема возникает, когда база данных не работает, поэтому мое приложение OAuth также отказывается развертываться. Приложения развернуты на другом сервере в рабочей среде, поэтому, пока мой контейнер перезапускается, мы не можем гарантировать порядок перезапуска сервера.
Я перепробовал множество доступных решений, таких как
//@EnableCassandraRepositories("<My Package>")
@EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class})
Используя аналогичный подход и в @SpringBootApplication
классе. Но ничего не помогло.
Реальная проблема, о которой я думаю, заключается в том, что мы используем реализацию Cassandra / Spring по умолчанию, в которой мы должны использовать репозитории. При развертывании приложения происходит сбой @Bean
/ @Autowired
аннотаций и моего приложения.
- Реализация, о которой мы думаем, может быть следующей: приложение OAuth должно запускаться независимо от того, отключена Cassandra или включена.
- Если сервер БД не работает, при поступлении первого запроса в OAuth он должен установить соединение, вернуть новый объект сеанса и повторно использовать тот же объект сеанса для следующих запросов.
Любая помощь очень ценится. Заранее благодарю вас.
Комментарии:
1. А что, если поступает первый запрос, а готовой к работе базы данных по-прежнему нет? Вы можете сделать beans ленивыми (как в точке создания, так и в точке внедрения).
2. Если приходит запрос, а база данных не работает, все в порядке, мы можем вернуть ответ об ошибке, но он должен проверять следующие запросы, если объект сеанса равен null, должен автоматически подключаться при запуске базы данных. Это ключевое изменение, которое нам нужно.
3. Какая версия Spring Boot? В драйвере Cassandra 4.x есть опции для продолжения повторного подключения до тех пор, пока оно не завершится успешно.
4. Я использую библиотеки серии OAuth 2.0 и Cassandra 3.0. Я думаю, что дело не в том, что Cassandra пытается подключиться повторно, но мы хотим, чтобы Spring boot развернул мое приложение, даже если база данных Cassandra не работает.
Ответ №1:
Вы можете установить
spring.datasource.continue-on-error=true
в файле application.properties.
Комментарии:
1. Я добавил свойство, но оно не помогло. Я даже добавил @Lazy из класса org.springframework.context.annotation. Ленивый; в моем классе конфигурации Cassandra. Но приложение по-прежнему не работает, когда база данных Cassandra не работает во время запуска.