Изменения URL базы данных из / config / application не влияют на мой вывод #Micronaut - PullRequest
1 голос
/ 04 ноября 2019

Я новичок в этом микронавтике и микро-сервисе. Вот моя проблема:

У меня есть две базы данных с именами «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, после чего база данных изменится. Но в настоящее время мне нужно перезапустить приложение, чтобы оно изменилось.

Может кто-нибудь сказать мне, что я сделал не так, и сказать, как заставить его работать? Большое спасибо и извините за плохой английский.

...