example (2)
스프링 부트(Spring boot)로 scheduling 개발하기

2016/09/07 - [개발/JAVA] - 스프링 부트(Spring boot)로 개발하기


위에서 기본적인 부트 환경이 세팅 되었으니 간단한 스케줄링 프로그램을 만들어보도록 한다.

매초마다 로깅을 하거나 배치처럼 작동할 수 있는 예제를 작성해본다.

스케줄링 설정
Application에 @EnableScheduling어노테이션을 달아준다.
package net.donnert.spring.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

Timer 소스 작성
package net.donnert.spring.boot;

import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;

@Component
public class Timer {
	Logger logger = LoggerFactory.getLogger(this.getClass());
	private AtomicInteger loopCounter = new AtomicInteger();
	
	@Autowired
	private StopWatch watch;
	
	@PostConstruct
	public void init() {
		watch.start();
	}

	@Scheduled(fixedDelayString = "1000")
	public void tick() throws InterruptedException{
		watch.stop();
		logger.info(watch.prettyPrint());
		String taskName = "task-";
		taskName = taskName + String.valueOf(loopCounter.getAndIncrement());
		watch.start(taskName);
	}

	@Bean
	public StopWatch watch() {
		return new StopWatch();
	}
}
@Scheduled어노테이션을 통해 작업이 끝난 후 1초 후 다시 작업을 시작한다.
fixedRateString의 경우 이전 작업이 끝나지 않아도 1초마다 작업을 시작한다.


타이머 돌리면서 카운트 올리는게 끝이다.

작업 결과는 다음과 같다.  각각의 작업이 정확히(?) 1초 후 다시 시작되는걸 볼 수 있다.

2016-09-07 16:03:56.843  INFO 10640 --- [pool-1-thread-1] net.donnert.spring.boot.Timer            : StopWatch '': running time (millis) = 9188

-----------------------------------------

ms     %     Task name

-----------------------------------------

00178  002%  

01000  011%  task-0

01002  011%  task-1

01001  011%  task-2

01001  011%  task-3

01001  011%  task-4

01002  011%  task-5

01001  011%  task-6

01001  011%  task-7

01001  011%  task-8


마무리

@Scheduled의 cron속성으로 크론탭처럼(* * * * *) 설정도 가능하다.

야밤에 배치를 돌리거나 간단한 작업을 할 수 있는 프로그램이 끝났다.

심지어 우리는 logback 설정도 안했는데 쓰고있다.

이게 스프링 부트의 매력이다.


다음장으로 이어집니다

2016/09/08 - [개발/JAVA] - 스프링 부트(Spring boot)에서 프로퍼티 사용하기


0  Comments,   0  Trackbacks
댓글 쓰기
스프링 부트(Spring boot)로 개발하기

프로젝트 생성

new-project-Maven Project를 생성한다.

groupId와 artifactId를 적고 프로젝트 생성을 하면 이미지처럼 나오게 된다.

(그냥 아무 프로젝트 만들어서 우클릭-configure-convert to maven project로 해도 된다)


Spring boot 라이브러리 추가

pom.xml을 열어서 dependencies와 동일 레벨로 parent를 추가한다.

  
    org.springframework.boot
    spring-boot-starter-parent
    1.4.0.RELEASE
   

dependencies 하위 항목으로 다음을 추가한다.

        
	        org.springframework.boot
	        spring-boot-starter
        


메인 소스 작성

Application 클래스를 생성하여 다음과 같이 작성 해준다.

package donnert.spring.boot;

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

@SpringBootApplication
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

테스트

실행을 해보면 다음과 같이 스프링이 돌아가는걸 볼 수 있다.

아무것도 없는 기본 예제지만 스프링 기반의 환경(?)이 만들어 졌다.


다음글로 계속..

2016/09/07 - [개발/JAVA] - 스프링 부트(Spring boot)로 scheduling 개발하기



  .   ____          _            __ _ _

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )

  '  |____| .__|_| |_|_| |_\__, | / / / /

 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::        (v1.3.5.RELEASE)


2016-09-07 11:06:27.631  INFO 5216 --- [           main] net.donnert.spring.boot.Application      : Starting Application on ezen-PC with PID 5216 (D:\Java\workspace\Ezens\paynow_simulator\spring.boot\target\classes started by donne in D:\Java\workspace\Ezens\paynow_simulator\spring.boot)

2016-09-07 11:06:27.635  INFO 5216 --- [           main] net.donnert.spring.boot.Application      : No active profile set, falling back to default profiles: default

2016-09-07 11:06:27.718  INFO 5216 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6765f738: startup date [Wed Sep 07 11:06:27 KST 2016]; root of context hierarchy

2016-09-07 11:06:28.888  INFO 5216 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup

2016-09-07 11:06:28.907  INFO 5216 --- [           main] net.donnert.spring.boot.Application      : Started Application in 1.674 seconds (JVM running for 2.058)

2016-09-07 11:06:28.908  INFO 5216 --- [       Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6765f738: startup date [Wed Sep 07 11:06:27 KST 2016]; root of context hierarchy

2016-09-07 11:06:28.910  INFO 5216 --- [       Thread-1] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown



0  Comments,   0  Trackbacks
댓글 쓰기