Пружинный преобразователь не может быть отключен условно - PullRequest
0 голосов
/ 03 августа 2020

Я использую конвертер для 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, но он активен.

...