невозможно настроить стратегию именования jpa при использовании postgres testcontainer после настройки нескольких источников данных - PullRequest
0 голосов
/ 24 марта 2020

У меня есть несколько источников данных в моем приложении, и я настроил стратегию именования по умолчанию для весенней загрузки, ссылаясь на принятый ответ на этот пост Невозможно установить стратегию именования JPA после настройки нескольких источников данных (Spring 1.4.1 / Hibernate 5 .x)

Однако, когда я пытаюсь использовать postgres testcontainer в junit, вышеуказанная конфигурация не работает.

Ниже мой джунит с postgres container

@Slf4j
@SpringBootTest
@ContextConfiguration(initializers = {secondaryRepositoryTest.Initializer.class})
@Testcontainers
class secondaryRepositoryTest {
    @Container
    private static final PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:latest")
            .withDatabaseName("test-db")
            .withUsername("sa")
            .withPassword("sa");
    @Autowired
    private secondaryRepository secondaryRepository;

    @BeforeEach
    void setup() {
        secondaryRepository.deleteAll();
    }

    @Test
    void shouldSaveAllsecondarys() {
        var allsecondary = Flux.range(0, 3)
                .map(savesecondary -> Objects.requireNonNull(secondaryDummyData()))
                .map(secondaryRepository::save);
        StepVerifier.create(allsecondary)
                .expectNextCount(3)
                .verifyComplete();
        assertThat(secondaryRepository.findAll()).hasSize(3);
    }



    static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
            TestPropertyValues.of(
                    "spring.data.postgres.url=" + postgreSQLContainer.getJdbcUrl(),
                    "spring.data.postgres.username=" + postgreSQLContainer.getUsername(),
                    "spring.data.postgres.password=" + postgreSQLContainer.getPassword(),
                    "spring.data.postgres.host=localhost",
                    "spring.data.postgres.port=" + postgreSQLContainer.getFirstMappedPort(),
                    "spring.data.postgres.database=" + postgreSQLContainer.getDatabaseName()
            ).applyTo(configurableApplicationContext.getEnvironment());

            TestPropertyValues.of(
                    "spring.datasource-secondary.jdbc-url=" + postgreSQLContainer.getJdbcUrl(),
                    "spring.datasource-secondary.username=" + postgreSQLContainer.getUsername(),
                    "spring.datasource-secondary.password=" + postgreSQLContainer.getPassword(),
                    "spring.datasource-secondary.driver-class-name=org.postgresql.Driver",
                    "jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy",
                    "jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy"
            ).applyTo(configurableApplicationContext.getEnvironment());

        }
    }
}
...