Я хочу знать. Могу ли я сделать это или получить его? В моем 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, но я могу его расширить. Удовлетворение этого может быть достигнуто, чтобы я мог определить больше свойств конфигурации базы данных с помощью этой методологии.
Или просто проще?
Вы должны иметь возможность расширять 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; };
}
}