Я использую конвертер для OffsetDateTime для хранения их в SQLServer, но я не хочу использовать его на H2, поэтому я пытался много думать, но он никогда не работает, всегда активен ....
Мой конвертер:
@Conditional(OffsetDateTimeConverterCondition.class)
@Converter(autoApply = true)
public class OffsetDateTimeConverter implements AttributeConverter<OffsetDateTime, String> {
private static final DateTimeFormatter FORMATTER_FROM_DB
= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnn xxx");
private static final DateTimeFormatter FORMATTER_TO_DB
= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnnnn xxx");
@Override
public String convertToDatabaseColumn(OffsetDateTime attribute) {
return attribute == null ? null : attribute.format(FORMATTER_TO_DB);
}
@Override
public OffsetDateTime convertToEntityAttribute(String dbData) {
return dbData == null ? null : OffsetDateTime.parse(dbData, FORMATTER_FROM_DB);
}
}
Мой класс условия:
public class OffsetDateTimeConverterCondition extends AnyNestedCondition {
public OffsetDateTimeConverterCondition() {
super(ConfigurationPhase.REGISTER_BEAN);
}
@ConditionalOnProperty(name = "required.datasource.dbms", havingValue = "SQLSERVER")
static class SQLSERVERCondition {
}
@ConditionalOnProperty(name = "required.datasource.dbms", havingValue = "ORACLE")
static class ORACLECondition {
}
}
Я пытался:
@Configuration
public class OffsetDateTimeConverterCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return Arrays.asList(DBMS.SQLSERVER.name(), DBMS.ORACLE.name())
.contains(context.getEnvironment()
.getProperty("required.datasource.dbms"));
}
}
Параметр правильно установлен на SQLSERVER или H2, OffsetDateTimeConverterCondition return false когда я нахожусь на H2, но он активен.