Backend/Spring

[Spring Error] wix-embedded-mysql 사용시 java.sql.sqlsyntaxerrorexception: table 'test-order_mgmt.products' doesn't exist 에러

mirae.kwak 2022. 9. 6. 15:28
728x90

Error

Test를 위한 embedded database를 사용하기 위해 wix-embedded-mysql을 사용하여 구현하였다.

 

maven 의존성 설정

<dependency>
    <groupId>com.wix</groupId>
    <artifactId>wix-embedded-mysql</artifactId>
    <version>4.6.2</version>
    <scope>test</scope>
</dependency>

Test 클래스

@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ActiveProfiles("test")
class ProductJdbcRepositoryTest {
	static EmbeddedMysql embeddedMysql;

    @BeforeAll
    static void setUp() {
        var config = aMysqldConfig(v5_7_10)
                .withCharset(Charset.UTF8)
                .withPort(2215)
                .withUser("test", "test1234!")
                .withTimeZone("Asia/Seoul")
                .build();
        embeddedMysql = anEmbeddedMysql(config)
                .addSchema("test-order_mgmt", ScriptResolver.classPathScript("schema.sql"))
                .start();
    }
    ...
}

schema.sql

CREATE TABLE products
(
    product_id BINARY(16) PRIMARY KEY,
    product_name VARCHAR(20) NOT NULL,
    category VARCHAR(50) NOT NULL,
    price bigint NOT NULL,
    description VARCHAR(500) DEFAULT NULL,
    created_at datetime(6) NOT NULL,
    updated_at datetime(6) DEFAULT NULL
);

 

  • schema.sql 에 products 테이블을 정의해놨지만 해당 테이블이 없다는 에러가 발생했다.

 

Solutions

mysql은 생성됐기 때문에 schema.sql 파일을 인식하지 못하는 것 같아 다음과 같이 코드를 변경하여 해결하였다.

@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ActiveProfiles("test")
class ProductJdbcRepositoryTest {
	static EmbeddedMysql embeddedMysql;

    @BeforeAll
    static void setUp() {
        var config = aMysqldConfig(v5_7_10)
                .withCharset(Charset.UTF8)
                .withPort(2215)
                .withUser("test", "test1234!")
                .withTimeZone("Asia/Seoul")
                .build();
        embeddedMysql = anEmbeddedMysql(config)
                .addSchema("test-order_mgmt", classPathScript("schema.sql"))
                .start();
    }
    ...
}

 

728x90