Есть приложение на спринг буте. Я хочу написать класс, который будет делать реконнект к RethinkDB
, если база упала. Я запустил таск, который проверяет, живо ли соединение, и если оно закрыто, то надо создать новое подключение и добавить его в контекст приложения. Класс такой:
package service;
import com.rethinkdb.RethinkDB;
import com.rethinkdb.net.Connection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class RethinkDBReconnector {
@Autowired
private RethinkDB r;
@Autowired
private Connection conn;
@Scheduled(fixedRate = 1000)
public void task() {
if (!conn.isOpen()) {
System.out.println("closed");
}
}
}
Соединение сконфигурировано так:
@Configuration
public class SpringConfig {
@Bean
public Connection connection(RethinkDB r) {
return r.connection().hostname("127.0.0.1").port(28015).connect();
}
@Bean
public RethinkDB rethinkDB() {
return RethinkDB.r;
}
}
Но я не знаю, как получить контекст приложения и добавить в него новое соединение так, чтобы его можно было использовать вместо старого. Не знаю, можно ли его внедрить как зависимость. Скорее всего нет. Как можно решить эту задачу?
Проблема не решена. Присваивание нового значения ссылке в реконнекторе не обновляет соединение глобально.
Попытался сделать так:
@Bean
@Scheduled(fixedRate = 1000)
public Connection connection(RethinkDB r) {
Connection conn = r.connection().connect();
if (conn == null || (!conn.isOpen())) {
conn = r.connection().connect();
}
return conn;
}
При запуске возникает исключение:
Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'connection': Only no-arg methods may be annotated with @Scheduled
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.processScheduled(ScheduledAnnotationBeanPostProcessor.java:496)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.lambda$null$1(ScheduledAnnotationBeanPostProcessor.java:359)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.lambda$postProcessAfterInitialization$2(ScheduledAnnotationBeanPostProcessor.java:359)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.postProcessAfterInitialization(ScheduledAnnotationBeanPostProcessor.java:358)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:434)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1749)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
... 63 common frames omitted
В классе SpringConfig
.....
@Autowired
private Connection conn;
@Bean
@Scheduled(fixedRate = 1000)
public Connection connection() {
if (null != conn && conn.isOpen()) {
return conn;
}
return RethinkDB.r.connection().hostname("127.0.0.1").port(28015).connect();
}
.....
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем доброго дня
Как можно сделать противофазу звука с микрофона и воспроизвести через наушники?
Перед мной стоит задача разработать приложение для android, целью которого является подключение android-устройства к raspberryКаким образом организовать...