-
[SPRING BOOT] 톰캣 구동 시 mariaDB 생성SPRING BOOT 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 포트로 접속하면 끝난다.
반응형'SPRING BOOT' 카테고리의 다른 글
[SPRING BOOT] 다국어 프로젝트 만들기 (0) 2019.11.25