SPRING BOOT
[SPRING BOOT] 톰캣 구동 시 mariaDB 생성
민덕이
2019. 11. 25. 14:10
반응형
이번 포스팅은 스프링 부트에서 톰캣 구동 시 MariaDB 설치 여부를 판단하여 MariaDB를 설치 하려고 한다.
임베디드 프로그램을 만들 때 유용하게 사용된다.
프로젝트 전체 경로
먼저 pom.xml에 추가를 해주자.
<dependency>
<groupId>ch.vorburger.mariaDB4j</groupId>
<artifactId>mariaDB4j</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
그다음 resourse 폴더 밑에 application.yml을 다음과 같이 생성한다.
server:
port: 80
spring:
profiles:
active: local_server
task:
execution:
pool:
core-size: 8
max-size: 8
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
---
spring:
profiles: local_server
messages:
basename: messages/message
encoding: UTF-8
devtools:
livereload:
enabled: true
db1:
datasource:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbc-url: jdbc:log4jdbc:mariadb://localhost:3309/demo?autoReconnect=true&useUnicode=true&characterEncoding=utf8
username: demo
password :
dbBackUpUrl: localhost:3309
server-url: localhost:80
maxIdle: 20
max-wait : 10000
max-active : 400
validationQuery: select 1
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
mariaDB4j:
dataDir: /demo/db/
port: 3309
isMysqlActive: Y
host: localhost
initSchema: init_db/schema.sql
initData: init_db/data.sql
# ===============================
# = tomcat ajp Property
# ===============================
tomcat:
ajp:
protocol: AJP/1.3
port: 8509
logging:
config: classpath:log4j2.xml
그 다음 resource 폴더 밑에 init_db라는 폴더를 생성 후 schema.sql, data.sql 파일을 생성한다.
파일은 본인 사용 용도에 맞게 바꿔서 사용하자.
필자는 필자가 개발한 프로젝트 DB의 일부분을 적었다.
디비 설치 시 해당 파일을 바라보고 생성된다.
schema.sql
-- 내 스키마
CREATE SCHEMA
IF NOT EXISTS `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 운영자
CREATE TABLE IF NOT EXISTS `demo`.`manager` (
`manager_seq` INT(10) NOT NULL AUTO_INCREMENT COMMENT '운영자시퀀스', -- 운영자시퀀스
`cust_seq` INT(10) NOT NULL COMMENT '고객사시퀀스', -- 고객사시퀀스
`manager_id` VARCHAR(500) NULL COMMENT '운영자아이디', -- 운영자아이디
`manager_type` VARCHAR(1) NULL COMMENT '운영자타입', -- 운영자타입
`cust_name` VARCHAR(100) NULL COMMENT '회사명', -- 회사명
`name` VARCHAR(50) NULL COMMENT '이름', -- 이름
`password` VARCHAR(500) NULL COMMENT '패쓰워드', -- 패쓰워드
`tel` VARCHAR(13) NULL COMMENT '전화번호', -- 전화번호
`push_key` VARCHAR(500) NULL COMMENT '푸쉬수신용키', -- 푸쉬수신용키
`email` VARCHAR(100) NULL COMMENT '이메일', -- 이메일
`create_date` datetime NULL COMMENT '생성일', -- 생성일
`modify_date` datetime NULL COMMENT '수정일', -- 수정일
`auth_type` VARCHAR(255) NULL COMMENT '인증수단', -- 인증수단
`reader_seq` INT(10) NULL COMMENT '리더기 시퀀스' -- 리더기 시퀀스
,PRIMARY KEY (
`manager_seq` -- 운영자시퀀스
)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
COMMENT '운영자';
data.sql
set names utf8;
INSERT INTO `demo`.`manager` (`manager_seq`,`cust_seq`,`manager_id`,`manager_type`,`cust_name`,`name`,`password`,`tel`,`push_key`,`email`,`create_date`,`modify_date`,`auth_type`) select 1,1,'admin','1','company','admin','8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918',NULL,NULL,NULL,'2019-02-14 12:55:34',NULL,NULL from dual where not exists (select manager_seq from demo.manager limit 1);
마지막으로 DemoApplication.java 파일을 다음과 같이 수정하자.
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import ch.vorburger.mariadb4j.springframework.MariaDB4jSpringService;
import java.net.Socket;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SpringBootApplication
public class DemoApplication {
@Autowired
Environment env;
private static final Logger log = LogManager.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
log.info("processing something in main end...");
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return new CommandLineRunner() {
@Override
public void run(String... args) throws Exception {
String isMysqlActive = env.getProperty("mariaDB4j.isMysqlActive");
String initSchema = env.getProperty("mariaDB4j.initSchema");
String initData = env.getProperty("mariaDB4j.initData");
String host = env.getProperty("mariaDB4j.host");
String dataDir = env.getProperty("mariaDB4j.dataDir");
int port = Integer.parseInt(env.getProperty("mariaDB4j.port").trim()) ;
// 프러퍼티로 mysql 사용 여부 dataDir
if("Y".equals(isMysqlActive)) {
MariaDB4jSpringService DB ;
// 기존에 mysql 포트가 대기 상태이면 mysql 구동 안함
try {
(new Socket(host, port)).close();
log.info("CvtServerSbootApplication.main() MariaDB4j already started DB no start~~~");
}catch(Exception e) {
log.info("CvtServerSbootApplication.main() MariaDB4j DB NEW start~~~");
DB = new MariaDB4jSpringService();
DB.setDefaultDataDir(dataDir);
DB.setDefaultPort(port);
DB.start();
DB.getDB().source(initSchema);
DB.getDB().source(initData);
}
}
log.info("CvtServerSbootApplication.main() isMysqlActive start? --> " + isMysqlActive);
}
};
}
}
이제 톰캣을 구동해보자.
정상적으로 실행되었다.
이제 MariaDB에 3309 포트로 접속하면 끝난다.
반응형