Spring2015. 8. 24. 14:23

Spring framework를 쓰기 위해 복잡한 설정을 할 필요없이 관례적으로 쓰는 기본 설정을 써서 바로 개발에 들어갈 수 있는 Spring Boot를 보다가 Task scheduler도 그대로 이용할 수 있지 않을까 해서 돌려봤습니다.


이제까지 XML 설정없이 annotation으로만 다른 기능들은 돌아갔기에 스케쥴링도 어노테이션만 추가해 보았습니다.


@Scheduled(fixedRate = 5000)


이거 하나만으로 돌아간다면 대박인데, 그렇게 쉽게는 안 돌아가더군요^^


메인 클래스에 @EnableScheduling 어노테이션 붙여줘야 스케쥴링 작동. 

* 참고사이트 : http://spring.io/guides/gs/scheduling-tasks/




@Component

public class ScheduledTasks {


     private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

@Scheduled(fixedRate = 5000)

public void reportCurrentTime(){

System.out.println("[fixedRate]The time is now " + dateFormat.format(new Date()));

}


}




그러던 스케쥴링 특성상 운영 초기에는 스케쥴링 시간 변경 빈도가 높을 수 있는데, 그때마다 빌드하면 불편한 점이 많습니다.


스케쥴링 시간 설정은 XML에서 하는 것이 변경이 용이하기에 스프링 부트에선 어떻게 XML로 따로 설정하는지 찾아봤습니다.


아래와 같이 @ImportResource 어노테이션 붙여주면 해당 파일에서 설정가능했습니다.




@SpringBootApplication

@EnableScheduling

@ImportResource("/tasks.xml")

public class Application {

public static void main(String[] args) throws Exception{

SpringApplication.run(Application.class, args);

}


}



tasks.xml


<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:task="http://www.springframework.org/schema/task"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">


<task:scheduled-tasks scheduler="myScheduler">

        <task:scheduled ref="myBean" method="reportCurrentTime" fixed-delay="5000" />

        <task:scheduled ref="myBean" method="reportCurrentTime2" cron="0 2 * * * *" />

    </task:scheduled-tasks>

 

    <task:scheduler id="myScheduler"/>

</beans>





스케쥴 설정의 reference를 연결하기 위해서 컴퍼넌트 이름 정해주고 @Scheduled 어노테이션을 제거하기만 하면 XML 설정대로 돌아갑니다.


@Component("myBean")

public class ScheduledTasks {


private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

public void reportCurrentTime(){

System.out.println("[fixedRate]The time is now " + dateFormat.format(new Date()));

}

public void reportCurrentTime2(){

System.out.println("[Cron]The time is now " + dateFormat.format(new Date()));

}

}









Posted by net4all
Server2013. 12. 24. 10:13

톰캣서버의 로그파일은 그대로 두면 사이즈가 엄청나게 커져 있음은 물론이고,

한 파일에 지금까지의 로그가 모두 기록되어 있기 때문에 필요한 정보 검색에도 불편함이 있다.
그래서 로그파일을 년/월/주/일 등의 간격으로 로테이션 시킬 필요가 있다.

지금 일하고 있는 회사에서도 상당히 많은 리눅스 서버에서 톰캣서버를 가동시키고 있는데
일주일에 한번 메인터넌스 작업중 톰캣을 정지시키고 수동으로 백업하는 작업을 해오고 있었다.

로그로테이션에 대해 알아보니 여러가지 방법이 있었는데 그 중에 추가 설치 없이 제일 편하게 사용할 수 있는 방법이
아파치 서버를 설치하면 기본 설치되는 "rotatelogs" 이다.

설정방법은 간단하다.

%CATALINA_HOME%bin/catalina.sh 수정 

1. touch "$CATALINA_BASE"/logs/catalina.out 를 삭제 또는 커멘트 처리

2. >> "$CATALINA_BASE"/logs/catalina.out2>&1 & 를 다음과 같이 수정
 | /usr/local/apache/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 &

단, 수정할 부분이 두 줄이므로 주의할 것(두 줄다 수정)
86400은 일단위로 로테이션(초단위 설정)
540은 표준시와 한국시간과의 시간차

위의 설정을 완료한 뒤, 톰캣서버를 재기동하면 catalina.out.yyyy-mm-dd 형식의 파일이 생성되어 있음을 알 수 있다.

이상으로 로테이션 설정은 완료.

이전 파일을 삭제하거나 압축해서 보관하는 쉘을 Cron에 등록해서 정기적으로 관리하면 더 좋겠다

 

출처 :  http://siho.tistory.com/52

Posted by net4all
데이타베이스2013. 3. 26. 16:03

오랫만에 TOAD를 다시 깔다보니 설정하는 것을 빼먹을 때가 있어서 적어봅니다.

 

환경설정에 아래 것만 적어놓아도 쉽게 됩니다.

오라클 클라이언트 위치가 D:\instantclient_11_2 라고 했을 때

 

PATH오라클 클라이언트 위치 (예: D:\instantclient_11_2) 추가

TNS_ADMIN 변수를 만들어 tnsnames.ora 파일이 있는 디렉토리 추가 (예: D:\instantclient_11_2\NETWORK\ADMIN)

 

한글이 안 될 경우는 아래 설정도 추가

변수명 : NLS_LANG , 변수값 : Korean_Korea.KO16KSC5601

 

참고로, 9 버전대는 64비트 클라이언트를 지원 안 해서 32비트를 깔고 해야 작동합니다.

 

 

Posted by net4all