Pull to refresh

Comments 5

С чего лучше начать по вашему миграцию?

С поднятия версии Spring Boot, наверное?

Тоже предстоит... Спринг рекомендует сначала до 3.5 обновиться

В конце статьи есть полный гайд.
Начать стоит с перехода на версию 3.5

Мой опыт:

RestTemplate -> RestClient

это не прямо SB4 миграция, но в 7 Спринге появились удобные @ImportHttpServices анотации, так что мы мигровали одновременно с SB4.
Проблема - @AutoConfigureMockRestServiceServer не работает если в контексте несколько груп. Моё решение

import org.springframework.boot.restclient.test.MockServerRestClientCustomizer;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestClient;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class MockServerRegistry {

    private final Map<String, MockServerRestClientCustomizer> customizers = new ConcurrentHashMap<>();
    private final Map<String, RestClient.Builder> builderByGroup = new ConcurrentHashMap<>();

    public void put(String group, RestClient.Builder builder) {
        builderByGroup.put(group, builder);
        customizers.computeIfAbsent(group, _ -> new MockServerRestClientCustomizer()).customize(builder);
    }

    public MockRestServiceServer get(String group) {
        RestClient.Builder builder = builderByGroup.get(group);
        if (builder == null) {
            throw new IllegalStateException("No builder for group: " + group);
        }
        return customizers.get(group).getServer(builder);
    }

}
@Configuration
@SuppressWarnings("static-method")
public class TestConfiguration {

    @Bean
    MockServerRegistry groupRestClientBuildersRegistry() {
        return new MockServerRegistry();
    }

    @Bean
    RestClientHttpServiceGroupConfigurer groupConfigurer(MockServerRegistry registry) {
        return groups -> groups.forEachGroup((group, builder, _) -> {
            registry.put(group.name(), builder);
        });
    }

}

и в тесте

@Autowired
private MockServerRegistry mockServerRegistry;

///...
mockServerRegistry.get("my_group").

BTW property для base URL: spring.http.serviceclient.my_group.base-url

Jackson migration

Поменялись названия пропертей
SP3:

#Rest configuration (modules JavaTimeModule and Jdk8Module loads automaticaly)
#AfterburnerModule defined as a bean in the configuration

# Keep numeric timestamps (instead of ISO-8601 strings)
spring.jackson.serialization.write-dates-as-timestamps=true

# Milliseconds precision (not nanoseconds)
spring.jackson.serialization.write-date-timestamps-as-nanoseconds=false
spring.jackson.deserialization.read-date-timestamps-as-nanoseconds=false

# avoid locale/host drift
spring.jackson.time-zone=UTC

# Ignore unknown JSON properties on deserialization
spring.jackson.deserialization.fail-on-unknown-properties=false

# Exclude null/empty properties from serialization
spring.jackson.default-property-inclusion=non_empty

SB4:

#Jackson configuration
#BlackbirdModule defined as a bean in the configuration

# Keep numeric timestamps (instead of ISO-8601 strings)
spring.jackson.datatype.datetime.write-dates-as-timestamps=true

# Milliseconds precision (not nanoseconds)
spring.jackson.datatype.datetime.write-date-timestamps-as-nanoseconds=false
spring.jackson.datatype.datetime.read-date-timestamps-as-nanoseconds=false

# avoid locale/host drift
spring.jackson.time-zone=UTC

# Ignore unknown JSON properties on deserialization
spring.jackson.deserialization.fail-on-unknown-properties=false

# Exclude null/empty properties from serialization
spring.jackson.default-property-inclusion=non_empty

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

Sign up to leave a comment.

Articles