Реализация резервного варианта в случае сбоя подключения к базе данныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Реализация резервного варианта в случае сбоя подключения к базе данных

Сообщение Anonymous »


Я баловался Spring и столкнулся с множеством проблем. Проблема, которую я сейчас пытаюсь решить, касается условного запуска компонента.

У меня есть защищенное приложение Spring. Используя Spring Security 6, мне удалось успешно реализовать авторизацию и ролевой доступ к различным страницам моего приложения. Более того, мне удалось подключить его к базе данных MySQL и получить оттуда учетные данные.

Сейчас я пытаюсь создать «аварийный» режим, чтобы при необходимости он мог работать без базы данных. Логика такая: если он может подключиться к базе данных, то он получает данные о пользователе оттуда. Если это невозможно, он возвращается к настройкам Spring Security по умолчанию (случайно сгенерированный пароль, который сохраняется в журнале).

В настоящее время без подключения он просто не запускается (что, конечно, ожидаемо).

Конфигурация безопасности, если необходимо (она очень общая):

@Configuration @EnableWebSecurity общественный класс WebSecurityConfig { @Бин public SecurityFilterChain securityFilterChain(HttpSecurity http) выдает исключение { http .authorizeHttpRequests((запросы) -> запросы .requestMatchers("/").hasRole("admin") .requestMatchers("/view").authenticated() ) .formLogin((форма) -> форма .permitAll() ) .logout((выход) -> logout.permitAll()); вернуть http.build(); } @Бин общественный PasswordEncoder getPasswordEncoder () { вернуть новый BCryptPasswordEncoder(); } @Услуга публичный класс CustomDetails реализует UserDetailsService { @Autowired частный UserRepository userRepository; @Override public UserDetails loadUserByUsername (String username) { securingweb.User пользователь = userRepository.findByUsername(имя пользователя); если (пользователь == ноль) { выбросить новое UsernameNotFoundException (имя пользователя); } вернуть новый UserPrincipal(пользователь); } } } Мне удалось найти этот фрагмент кода, который позволяет определить успешность подключения к БД:

@Component общественный класс DBCheck { public DBCheck(DataSource dataSource) выдает SQLException { log.info("Подключение к базе данных действительно = {}", dataSource.getConnection().isValid(1000)); } } И это действительно так. Я добавил его в свой основной класс, и, похоже, он запускается раньше других компонентов. Теперь, если я правильно понимаю, мне нужно сделать это Соединение. И установите указанное условие на мои bean-компоненты, чтобы начать зависеть от него.

И здесь для меня все сложнее. Я не смог хорошо понять Connection. Так как мне это сделать? Это пользовательское Соединение? Если да, нужно ли мне что-то делать с предоставленными ему полями контекста и метаданных? Или они обрабатываются магией Spring? Или я все делаю неправильно? Я очень запутался.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»