SPRING BOOT

[SPRING BOOT] 톰캣 구동 시 mariaDB 생성

민덕이 2019. 11. 25. 14:10
반응형

이번 포스팅은 스프링 부트에서 톰캣 구동 시 MariaDB 설치 여부를 판단하여 MariaDB를 설치 하려고 한다.

임베디드 프로그램을 만들 때 유용하게 사용된다.

 

demo.zip
0.07MB

 

프로젝트 전체 경로

 

 

먼저 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 포트로 접속하면 끝난다.

반응형