2019년 7월 15일 월요일

Embedded Mysql for springboot

나는 개인적으로 local 작업시 db, redis 같은 걸 별도로 인스톨해서 쓰지 않고 embedded하는 편이다.

일단 시간이 없으니 볼론으로 들어가서 mysql을 embedded하는 건 다음과 같다. (참고로 코드는 kotlin이다.)

일단 라이브러리 추가.


compile("com.wix:wix-embedded-mysql:4.2.0")

그리고 다음 configration을 추가


@Profile(value = ["default"])
@Component
@EnableConfigurationProperties(value = [DataSourceProperties::class])
class DefaultEmbeddedMysql(
    private val properties: DataSourceProperties
) {
    private val log = LoggerFactory.getLogger(javaClass)
    private lateinit var mysqlServer: EmbeddedMysql

    @PostConstruct
    @Throws(IOException::class)
    fun start() {
        log.info("Initializing embedded Mysql instance")

        val uri = URI.create(properties.url.substring(5))
        val config = MysqldConfig.aMysqldConfig(Version.v5_7_19)
            .withCharset(Charset.UTF8)
            .withPort(uri.port)
            .withTimeZone(TimeZone.getTimeZone("Asia/Seoul"))
            .withUser(properties.username, properties.password)
            .build()

        val path = uri.path.removePrefix("/")

        mysqlServer = EmbeddedMysql.anEmbeddedMysql(config)
            .addSchema(SchemaConfig.aSchemaConfig(path).withCharset(Charset.UTF8).build())
            .start()
    }

    @PreDestroy
    @Throws(InterruptedException::class)
    fun stop() {
        mysqlServer.stop()
    }

    @Bean
    fun dataSource(): DataSource {
        return properties.initializeDataSourceBuilder().build()
    }
}


이러면 springboot가 뜰 때 mysql을 다운받고 mysqld로 mysql을 기동하는 걸 로그로 볼 수 있다.
local에서만 사용하도록 꼭 @Profile을 추가해주자.

댓글 없음:

댓글 쓰기