Как передать hibernate-диалект в тесте с использованием testContainers, чтобы он соответствовал моему контейнеру - PullRequest
0 голосов
/ 17 марта 2020

Я не нахожу никакой информации о причине, по которой я получаю ошибку ниже, или о способе передачи диалекта в общем виде c. Я использую весеннюю загрузку версии 2.2.4

У меня есть следующий тест для моего приложения с библиотекой тестовых контейнеров против MySQL. Я использую инициализатор контекста приложения специально для теста, и я должен установить диалект JPA, в противном случае я получаю сообщение об ошибке в журнале, тест все еще проходит, но я пытаюсь понять, где происходит ошибка и почему. Я ищу способ передать диалект в общем c способ

@RunWith(SpringRunner.class)
@SpringBootTest(classes = PetClinicApplication.class,
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(initializers = {BootTestContainersSpockApplicationTests.Initializer.class})
public class BootTestContainersSpockApplicationTests {

@Autowired
private SpecialtyService specialtyService;


@ClassRule
public static MySQLContainer mySQLContainer = (MySQLContainer) new MySQLContainer("mysql:5.5")
        .withInitScript("db/schema.sql")
        .withDatabaseName("sampleapp")
        .withUsername("user")
        .withPassword("password");

@Test
public void testAgainstMySQL() {

    loadSpecialties();

    assertEquals(3L, specialtyService.findAll().size());

}

private void loadSpecialties() {
    Arrays.asList(new Specialty("radiology"),
            new Specialty("surgery"),
            new Specialty("dentistry")).forEach(specialty -> specialtyService.addSpecialty(specialty));
}



static class Initializer
        implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
        TestPropertyValues.of(
                "spring.datasource.url=" + mySQLContainer.getJdbcUrl(),
                "spring.datasource.username=" + mySQLContainer.getUsername(),
                "spring.datasource.driver-class-name=" + mySQLContainer.getDriverClassName(),
                "spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect",
                "spring.datasource.password=" + mySQLContainer.getPassword()
        ).applyTo(configurableApplicationContext.getEnvironment());
    }
}
}

, тест работает нормально, но когда я отмечаю эту строку

"spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect"

в комментарии я получить следующую ошибку:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table 'SEQUENCES' in information_schema
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_144]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_144]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_144]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_144]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2439) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1365) ~[mysql-connector-java-5.1.48.jar:5.1.48]
at com.zaxxer.hikari.pool.ProxyStatement.executeQuery(ProxyStatement.java:111) ~[HikariCP-3.4.2.jar:na]
at com.zaxxer.hikari.pool.HikariProxyStatement.executeQuery(HikariProxyStatement.java) ~[HikariCP-3.4.2.jar:na]
at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:42) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.sequenceInformationList(JdbcEnvironmentImpl.java:403) [hibernate-core-5.4.10.Final.jar:5.4.10.Final]
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl.<init>(JdbcEnvironmentImpl.java:268) 
...