У меня есть несколько источников данных в моем приложении, и я настроил стратегию именования по умолчанию для весенней загрузки, ссылаясь на принятый ответ на этот пост Невозможно установить стратегию именования 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());
}
}
}