스프링부트 - Runners

Spring Boot/개발환경|2019. 4. 11. 01:25

스프링 부트가 구동되는 시점에 특정 코드를 실행 시키기 위해서는
Command Line Runner와 Application Runner를 이용할 수 있습니다.
두 Runner는 스프링 부트에서 제공되는 인터페이스입니다.

Maven 의존성 라이브러리

pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

1. CommandLineRunner

1-1. CommandLineRunner 예제

DemoApplication.java
package com.developer.hive.demo;

import java.util.Arrays;
import java.util.stream.Collectors;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // TODO Auto-generated method stub
        String argsArray = Arrays.stream(args).collect(Collectors.joining(","));
        System.out.println("CommandLineRunner 시작 : args = " + argsArray);
    }
}

1-2. STS Run Configurations...

실행환경을 설정하기위 Run > Run Configurations... 메뉴를 클릭하여 줍니다.

1-3. STS Run Configurations > Arguments

Arguments 탭에서 a b c 값을 넣어주고 Run 버튼을 클릭

1-4. 결과

자세히 보시면 Arguments 탭에서 입력한 값 앞쪽에 입력하지 않은 --spring.output.ansi.enabled=always 값이 보입니다.

STS Run Configurations...

ANSI console output 버튼을 클릭 해제해 줍시다.

결과

이제서야 Arguments에 입력한 a b c 값만 출력이 되었습니다.
ANSI 콘솔이 해제되어 컬러가 없지만 --spring.output.ansi.enabled=always 문자열 값이 들어가지 않습니다.


2. ApplicationRunner

2-1. ApplicationRunner 예제

package com.developer.hive.demo;

import java.util.List;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements ApplicationRunner {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // TODO Auto-generated method stub
        List<String> argsList = args.getNonOptionArgs();
        System.out.println("ApplicationRunner 시작 : args = " + argsList.toString());
    }
}

2-2. STS Run Configurations > Arguments

Arguments 탭에서 x y z 값을 넣어주고 Run 버튼을 클릭

2-3. 결과

Arguments x y z 값이 출력되었습니다.


3 @Order 어노테이션

3-1. @Order 어노테이션 예제

package com.developer.hive.demo;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;

@SpringBootApplication
public class DemoApplication {

    @Order(1)
    @Configuration
    public class TestCommandLineRunner implements CommandLineRunner {

        @Override
        public void run(String... args) throws Exception {
            // TODO Auto-generated method stub
            String argsArray = Arrays.stream(args).collect(Collectors.joining(","));
            System.out.println("CommandLineRunner 시작 : args = " + argsArray);

        }
    }

    @Order(3)
    @Configuration
    public class TestCommandLineRunner1 implements CommandLineRunner {

        @Override
        public void run(String... args) throws Exception {
            // TODO Auto-generated method stub
            String argsArray = Arrays.stream(args).collect(Collectors.joining(","));
            System.out.println("CommandLineRunner1 시작 : args = " + argsArray);

        }
    }

    @Order(2)
    @Configuration
    public class TestApplicationRunner implements ApplicationRunner {

        @Override
        public void run(ApplicationArguments args) throws Exception {
            // TODO Auto-generated method stub
            List<String> argsList = args.getNonOptionArgs();
            System.out.println("ApplicationRunner 시작 : args = " + argsList.toString());

        }
    }

    @Order(4)
    @Configuration
    public class TestApplicationRunner1 implements ApplicationRunner {

        @Override
        public void run(ApplicationArguments args) throws Exception {
            // TODO Auto-generated method stub
            String[] argsList = args.getSourceArgs();
            System.out.println("ApplicationRunner1 시작 : args = [" +  Arrays.stream(argsList).collect(Collectors.joining(", "))+"]");
        }
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

3-2. 결과

@Order 어노테이션 예제 순서대로 실행된것을 확인할 수 있습니다.

댓글()

스프링부트 H2 데이터베이스

Spring Boot/개발환경|2019. 4. 8. 23:36

H2는 RDBMS(관계형데이터베이스)입니다.
매우 빠르고작은 크기의 데이터베이스라고 보시면 됩니다.
주로 메모리에 데이터를 저장하는 용도로 쓰이며, 디스크에 데이터를 저장할수도 있습니다.

  • 매우 빠른 오픈 소스, JDBC API
  • 임베디드 및 서버모드(영구 데이터베이스), 메모리 내 데이터베이스
  • 브라우저 기반 콘솔 응용 프로그램 지원
  • 작은 설치 공간 : 약 2MB jar 파일 크기

영구 데이터베이스와 인 메모리 데이터베이스의 차이점

영구 데이터베이스는 실제 메모리에 데이터를 유지하므로 데이터베이스 서버가 반송 되더라도 다시 사용이 가능합니다.
인 메모리 데이터베이스의 경우 데이터는 시스템 메모리에 저장되며 프로그램을 닫으면 데이터가 손실됩니다.

인 메모리 데이터베이스는 POC(Proof Of Concept)에 사용되며 프로덕션 응용 프로그램에서는 권장하지 않습니다.

영구 데이터베이스는 Oracle, Mysql, Postgres 등을 사용하며, H2는 일반적으로 메모리 데이터베이스로 사용합니다.

인메모리DB

  • 컴퓨터가 꺼지면 모든 내용이 날라감
  • 연속성이 없음
  • 연속성을 주는 방법이 있지만, 그 방법을 쓰려면 그냥 일반 DB모드로 쓰면 된다.

Maven 의존성 라이브러리

pom.xml
<dependencies>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

1. H2 데이터베이스 설정

1-1. 기본설정

spring.datasource.url=jdbc:h2:mem:testdb  
spring.datasource.driverClassName=org.h2.Driver  
spring.datasource.username=sa  
spring.datasource.password=  
spring.h2.console.enabled=false  

H2데이터베이스는 따로 설정하지 않으면 위와 같은 값으로 기본 설정을 합니다.
datasource.url의 jdbc:h2:mem:testdb는 testdb 스키마에 mem 인 메모리 데이터베이스로 동작하라는 설정입니다.

1-2. 기본설정 무시

src/main/resources/application.properties
spring.h2.console.enabled=true

application.properties에 추가하여 H2 콘솔을 사용하게 합니다.
물론 나머지 설정들은 기본값으로 들어갑니다.


2. H2 콘솔 접속

2-1. 스프링 실행 후 로그인 창 접속

http://localhost:8080/h2-console

기본 설정으로 스프링을 실행했다면 따로 건들건 없으며 Connect 버튼을 클릭하여 접속합니다.

2-2. H2 로그인 접속

이 창에선 직접 테이블을 만들거나 지우거나 CRUD가 가능합니다.
단, 스프링부트를 종료하게 된다면 작업했던 내역들은 전부 사라집니다.


3. 스프링부트가 실행될때 SQL문을 실행시키기

3-1. sql파일생성

src/main/resources/data.sql
CREATE TABLE Employee
(
    id integer NOT NULL,
    firstName varchar(255) not null,
    lastName varchar(255) not null,
    email varchar(255),
    phoneNumber varchar(255),
    hireDate timestamp,
    salary integer,
    commissionPct integer,
    primary key(id)
);

3-2. 스프링 재 실행 후 접속

EMPLOYEE 테이블이 생성되면서 실행된것을 볼 수 있습니다.
CREATE문이나 INSERT문 등 테스트환경에 필요한 데이터베이스의 값들을 미리 설정하여 좀더 쉽게 개발이 가능합니다.

댓글()

스프링부트 Maven 프로젝트 Import 하기

Spring Boot/개발환경|2019. 4. 8. 00:03

스프링부트 프로젝트에선 대표적으로 두가지의 유형의 프로젝트가 있습니다.

  • Maven Project
  • Gradle Project

STS에서 Maven 프로젝트를 Import하는 방법을 소개하려 합니다.
start.spring.io를 이용한 스프링 부트 프로젝트 생성 에서 받은 프로젝트를 불러오도록 하겠습니다.


1. STS에서 import

1-1. File > Import...

1-2. Maven > Existing Maven Projects

Next 버튼을 클릭

Browse... 버튼을 클릭하여 Maven 프로젝트의 폴더를 선택하여 줍니다.
Finish 버튼을 눌러 줍니다.


2. 자동으로 Maven Importing

2-1. pom.xml의 디펜던시 설치

아래 화살표를 보시면 Importing Maven projects가 100%가 되면 pom.xml에 있는 디펜던시를 전부 다운로드하게 됩니다.
따로 설정하시지 않았다면 C:\Users\사용자명.m2에 다운로드 받습니다.

2-2. Package Explorer

메이븐 형태의 구조로 적용되어 있습니다. 그리고 프로젝트명 옆에 [boot]라는 표시가 보입니다.

2-3. Boot Dashboard

위에 뜬 DemoJpa

DemoJpaApplication.java
package com.developer.hive.DemoJpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoJpaApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoJpaApplication.class, args);
    }

}

@SpringBootApplication을 인식하여 뜬것입니다.
따로 Run Configurations에서 설정도 가능합니다.


3. 실행

3-1. Boot Dashboard에서 (Re)start

[Before]

[After]

3-2. 브라우저에서 localhost:8080 접속

pom.xml 디펜던시에 spring-data-rest-hal-browser를 설정하여 위와 같은 화면이 뜬것입니다.

댓글()

STS 다운로드 및 설치

Spring Boot/개발환경|2019. 4. 5. 00:56

스프링 프레임워크를 쉽게 이용하기 위한 개발 툴인 STS(SpringToolSuite)
이미 개발 툴들이 많지만, 가장 점유율이 많은 개발 툴로 알려진(?) STS를 이용해 보겠습니다.

0. 이전에 해야하는 작업은?


1. 다운로드

https://spring.io/tools 접속

자신의 PC사양에 맞는 Spring Tools 4 for Eclipse(STS)를 다운로드 받는다.


2. 설치

설치라고 하였지만 STS는 다운로드한 zip파일을 자신이 원하는 폴더에 압축을 풀어 주시면 됩니다.

압축을 풀면 sts-4.2.0.RELEASE 폴더에 SpringToolSuite4.exe 실행 파일이 보일 것입니다.


3. 실행

SpringToolSuite4.exe 실행하면 멋있는 로고가 출력되고

위와 같이 나타날 것입니다. Browse... 버튼 을 눌러서 Workspace 폴더를 설정하시면 됩니다.
Launch 버튼 을 눌러서 실행

드디어 STS를 설치(Workspace설정)하고 실행하였습니다.


4. STS 환경설정

보통 개발을 할때는 UTF-8 유니코드를 이용하여 만들어 줍니다.
STS의 Workspace 폴더를 새로 설정하면 Windows 환경에서는 UTF-8로 잡혀있지 않아서
새로운 Workspace 폴더를 잡을 때마다 설정을 해주셔야 합니다.

상단에 [Window] - [Preferences]를 들어가면 설정이 가능합니다.

4-1.General > Content Types > Text

4-2. General > Workspace

댓글()

start.spring.io를 이용한 스프링 부트 프로젝트 생성

Spring Boot/개발환경|2019. 3. 27. 22:12

1. start.spring.io 접속

https://start.spring.io 사이트에서는 스프링 부트 프로젝트를 자동으로 만들어주는 서비스를 제공합니다.
스프링부트 프로젝트를 직접 다운로드하여 이용하려면 사이트에 접속하여 적절한 옵션을 선택하여 이용하여 줍시다.

  • Project
  • Language
  • Spring Boot
  • Project Metadata
  • Dependencies

2. 사용 방법은?

프로젝트의 언어와 스프링 부트의 버전, 프로젝트의 Group/Artifact 그리고 Dependencies의 사용할 Dependency를 넣어주시면 됩니다.

  • Project
    • Maven Project
  • Language
    • Java
  • Spring Boot
    • 2.13
  • Project Metadata
    • Group
      • com.developer.hive
    • Artifact
      • DemoJpa
  • Dependencies
    • JPA
    • JDBC
    • Web
    • H2
    • Rest Repositories HAL Browser

2-1 모든 Dependencies를 보려면?

Dependencies 밑에 See all을 클릭하시면 됩니다.

2-2 다운로드

아래에 있는 Generate Project - alt + ⏎ 버튼을 클릭하시면 Artifact명으로 된 zip파일을 다운로드하게 됩니다.

3. 다운받은 프로젝트 파일 구조

Artifact명으로 된 zip파일을 압축을 해제하면 다음과 같은 폴더와 파일들이 보입니다.

3-1 cmd창에서 한눈에 보려면?

해당 디렉토리에서 명령어 입력

> tree /f

'Spring Boot > 개발환경' 카테고리의 다른 글

스프링부트 - Runners  (0) 2019.04.11
스프링부트 H2 데이터베이스  (0) 2019.04.08
스프링부트 Maven 프로젝트 Import 하기  (0) 2019.04.08
STS 다운로드 및 설치  (1) 2019.04.05

댓글()