Table of Contents
Use MariaDB
h2 데이타베이스 대신 MariaDB 를 데이타베이스로 변경합니다.
개발환경
- Spring Boot 2.1.x
- Gradle 4.10.2
프로젝트는 이전 글에서 작성된 프로젝트에 파일을 추가 또는 수정하는 방식으로 진행됩니다. 이전 글을 따라 하지 않은 경우, 먼저 이전 글대로 프로젝트를 구성하시기 바랍니다.
파일추가 및 수정
build.gradle
// ......
dependencies {
// ......
compile("org.mariadb.jdbc:mariadb-java-client")
// ......
}
// ......
h2 는 테이블을 자동생성 하지만, MariaDB
는 디폴트로 테이블을 수동생성하도록 하고 있습니다.
운영환경에서 사용하기에 테이블 자동생성 기능은 위험성이 크므로 수동으로 생성해줍니다.
src/main/resources/schema.sql.sample
CREATE TABLE `spring_session` (
`PRIMARY_ID` char(36) NOT NULL,
`SESSION_ID` char(36) NOT NULL,
`CREATION_TIME` bigint(20) NOT NULL,
`LAST_ACCESS_TIME` bigint(20) NOT NULL,
`MAX_INACTIVE_INTERVAL` int(11) NOT NULL,
`EXPIRY_TIME` bigint(20) NOT NULL,
`PRINCIPAL_NAME` varchar(100) DEFAULT NULL,
PRIMARY KEY (`PRIMARY_ID`),
UNIQUE KEY `SPRING_SESSION_IX1` (`SESSION_ID`),
KEY `SPRING_SESSION_IX2` (`EXPIRY_TIME`),
KEY `SPRING_SESSION_IX3` (`PRINCIPAL_NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
CREATE TABLE `spring_session_attributes` (
`SESSION_PRIMARY_ID` char(36) NOT NULL,
`ATTRIBUTE_NAME` varchar(200) NOT NULL,
`ATTRIBUTE_BYTES` blob NOT NULL,
PRIMARY KEY (`SESSION_PRIMARY_ID`,`ATTRIBUTE_NAME`),
CONSTRAINT `SPRING_SESSION_ATTRIBUTES_FK` FOREIGN KEY (`SESSION_PRIMARY_ID`) REFERENCES `spring_session` (`PRIMARY_ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
CREATE TABLE `posts` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`created_date` datetime DEFAULT NULL,
`modified_date` datetime DEFAULT NULL,
`author` varchar(255) DEFAULT NULL,
`content` text NOT NULL,
`title` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`picture` varchar(255) DEFAULT NULL,
`role` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
아래 설정으로 디비에 세션을 저장하도록 변경합니다.
톰캣을 재가동해도 세션 로그인이 유지됩니다.
src/main/resources/application.properties
spring.jpa.show_sql=true
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.h2.console.enabled=false
# 디비에 세션 저장
spring.session.store-type=jdbc
# =========================================================
# FOR MariaDB
# =========================================================
spring.datasource.url=jdbc:mariadb://localhost:3306/db_test
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
# spring.session.jdbc.initialize-schema=always