свойство в подклассе DatabaseConfiguration не может быть найдено в yaml Dropwizard (иерархическая проблема)

1

Я хочу знать. Могу ли я сделать это или получить его? В моем Dropwizard config.yml я хотел расширить класс базы данных, чтобы добавить другое свойство в config.yml, как показано ниже.

config.yml

database
  driverClass: org.postgresql.Driver
  user: user1
  password: password
  exampleProperty: property1 (Tried a few other permutations)

Предположим, что класс DatabaseConfiguration имеет поля с геттерами и аннотации для driverClass, пользователя, пароля и т.д.

public class AppConfiguration extends Configuration {
  @Valid
  @NotNull
  @JsonProperty
  private DatabaseConfiguration database = new DatabaseConfiguration();

  public DatabaseConfiguration getDatabaseConfiguration() {
    return database;
  }

  @Valid
  @NotNull
  @JsonProperty
  private ExtendedDatabaseConfiguration extDatabase;
  public ExtendedDatabaseConfiguration getExtendedDatabaseConfiguration() {
     return extDatabase;
  }

  public class ExtendedDatabaseConfiguration extends DatabaseConfiguration {
  @Valid
  @NotNull
  @JsonProperty
  private String exampleProperty;
  public String getExampleProperty() { return exampleProperty; };
  }

Основной класс Server.java передает ExtendedDatabaseConfiguration в Hibernate Bundle через вызов (ранее переданный DatabaseConfiguration)

    private final CustomHibernateBundle<AppConfiguration> hibernateBundle = new CustomHibernateBundle<AppConfiguration>() {
    @Override
    //Giving the subclass holding the new database property to the CustomHibernateBundle
    public DatabaseConfiguration getDatabaseConfiguration(AppConfiguration configuration) {
        return configuration.getExtendedDatabaseConfiguration();
    }
};
    SimpleModule simpleModule = new SimpleModule();
    simpleModule.addAbstractTypeMapping(DatabaseConfiguration.class, ExtendedDatabaseConfiguration.class);
    bootstrap.getObjectMapperFactory().registerModule(simpleModule);

Это все, чтобы CustomHibernateBundle мог использовать это поле, как ему заблагорассудится.

Независимо от того, что я попробовал, либо я получил ошибку jackson.databind.exc.UnrecognizedPropertyException, либо я получил следующее

Exception in thread "main" com.yammer.dropwizard.config.ConfigurationException: powaaim.yml has the     following errors:
* extDatabase may not be null (was null)
* exampleProperty may not be null (was null)

Просто отметить. У меня нет доступа к изменению DatabaseConfiguration, но я могу его расширить. Удовлетворение этого может быть достигнуто, чтобы я мог определить больше свойств конфигурации базы данных с помощью этой методологии.

Или просто проще?

Теги:
yaml
dropwizard

1 ответ

2
Лучший ответ

Вы должны иметь возможность расширять DatabaseConfiguration - я думаю, вы просто добавили дополнительное поле конфигурации, которое теперь ожидает синтаксический анализатор (хотя я не уверен, откуда приходит предупреждение о недостающем key). Попробуйте следующий класс конфигурации:

public class AppConfiguration extends Configuration {
  @Valid
  @NotNull
  @JsonProperty
  private ExtendedDatabaseConfiguration database = new ExtendedDatabaseConfiguration();

  public ExtendedDatabaseConfiguration getDatabaseConfiguration() {
    return database;
  }

  static class ExtendedDatabaseConfiguration extends DatabaseConfiguration {
    @Valid
    @NotNull
    @JsonProperty
    private String exampleProperty;
    public String getExampleProperty() { return exampleProperty; };
  }
}
  • 0
    извинения @condit. должен был полностью заменить «ключ» для «exampleProperty». Изменен ОП.
  • 0
    Есть ли какая-то конкретная причина, почему ExtendedDatabaseConfiguration должен быть статическим?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню