ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPRING BOOT] 톰캣 구동 시 mariaDB 생성
    SPRING BOOT 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 포트로 접속하면 끝난다.

    반응형

    'SPRING BOOT' 카테고리의 다른 글

    [SPRING BOOT] 다국어 프로젝트 만들기  (0) 2019.11.25
Designed by Tistory.