Я новичок в этом микронавтике и микро-сервисе. Вот моя проблема:
У меня есть две базы данных с именами «consul» и «consul_1» в Postgres. У них обоих есть одна таблица с именем "trials" с одинаковыми именами столбцов (name: varchar и age: int), но с разными данными.
И у меня есть одно простое приложение с REST API, использующее Micronaut для отображения данных моей таблицы. Я слышал об этом Централизованная конфигурация или Распределенная конфигурация , затем я попытался создать конфигурацию в Консуле / config / application KV в формате yaml.
Моя конфигурация на самом делеработает. Я могу правильно отобразить данные таблицы и значение свойства (с именем foo.bar). Однако, когда я изменил URL источника данных с ../consul на ../consul_1 и значение foo.bar с halo на hai , достигнув / обновив конечную точку, то попытался показать своюДанные таблицы и значение foo.bar снова, мои данные таблицы остались прежними, но foo.bar изменился.
ОБНОВЛЕНИЕ Я попытался добавить аннотацию @Refreshable
от micronaut в хранилище,класс контроллера и класс POJO из любопытства, но ничего из этого не работает. Я также попытался удалить @CurrentSession
и @PersistenceObject
из реализации репозитория (потому что я думал, что это было причиной), но ничего не произошло.
Я попытался использовать getEntityManagerFactory().getCache().evictAll()
, попробуйте настроить 2 источника данныхзатем с помощью @Transactional("${foo.bar}"
(имя источника данных совпадает со значением foo.bar) и @CurrentSession("${foo.bar})
в надежде обновить соединение. но они не работали
версия Micronaut: 1.2.1;Версия JVM: 1.8.0
вот мой текущий код:
REST Controller
@Controller("/control")
public class control {
@Inject
public inter Inter;
@Get("/")
public String test(){
System.out.println(Inter.string());
return String.valueOf(Inter.showAll());
}
}
Интерфейс репозитория
public interface inter {
List<Trials> showAll();
String string();
}
Реализация репозитория
@Singleton
@Refreshable
public class imple implements inter {
@Inject
@CurrentSession
private EntityManager entityManager;
@Value("${foo.bar}")
private String s;
@Override
@Transactional(readOnly = true)
public List<Trials> showAll(){
String qstring = "select u from Trials u";
TypedQuery<Trials> query = entityManager.createQuery(qstring, Trials.class);
List<Trials> hasil = query.getResultList();
return hasil;
}
@Override
public String string(){
return s;
}
}
ИспытанияКласс
@Entity(name = "Trials")
@Table
public class Trials {
@Id
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
public Uji_Coba() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString(){
ObjectMapper objectMapper = new ObjectMapper();
try{
return objectMapper.writeValueAsString(this);
}catch (JsonProcessingException e){return "failed";}
}
}
application.yml
micronaut:
application:
name: consul-config-exc
---
consul:
client:
registration:
enabled: true
---
endpoints:
all:
enabled: true
sensitive: false
stop:
enabled: false
bootstrap.yml
micronaut:
application:
name: consul-config-exc
config-client:
enabled: true
consul:
client:
config:
format: YAML
defaultZone: "${CONSUL_HOST:localhost}:${CONSUL_PORT:8500}"
и, наконец, / config / application в ключе консула / значение
foo:
bar: halo
---
datasources:
default:
url: jdbc:postgresql://localhost:5432/consul
username: postgres
password: root
driverClassName: org.postgresql.Driver
---
jpa:
default:
entity-scan:
- "consul.config.exc.domain"
что я хочукогда я изменяю "consul" на "consul_1", мне нужно только нажать / обновить конечную точку, предоставленную micronaut, после чего база данных изменится. Но в настоящее время мне нужно перезапустить приложение, чтобы оно изменилось.
Может кто-нибудь сказать мне, что я сделал не так, и сказать, как заставить его работать? Большое спасибо и извините за плохой английский.