Google App Engine 에서는 Spring Scheduler 를 지원하지 않았다. 에러 내용을 남기지 못했는데
스레드를 생성할 권한이 없다는 취지의 에러 였다.
Google App Engine 은 파일 시스템 액세스나 스레드 관련해서는 허용 하지 않는다.
대신에 대처할 수 있는 여러 서비스가 존재 한다.
Google Cloud Platform 의 하위 서비스로 Google App Engine 과 Cloud SQL 이 존재 하듯이
Google Cloud Platform 문서 나 구글 검색을 해보면 답을 얻을 수 있다.
따라서, Spring Scheduler 를 대신 하기 위해서는 아래의 문서를 참조 할것.
처음엔 cron.xml (https://cloud.google.com/appengine/docs/java/config/cron) 기반의 설정 문서로 작업을 했는데 아무리 문서를 따라해도 스케줄 작업이 등록이 안되는 것임. ㅡㅡ;
그래서 위 cron.yaml 문서의 내용대로 처리를 하니
console.cloud.google.com -> App Engine -> 작업 대기열 -> 크론 작업 에 등록이 되었다.
다음은 정상 등록되는 과정이다.
1. 기존 스프링 스케줄 @Scheduled annotation 삭제
ex) @Scheduled(cron = "0 0 2 * * *") annotation 을 제외한다.
2. cron.yaml 생성
cron:
- description: "Get Info From YouTubeApi Cron Job" # 설명
url: /schedule/get/from/youtube/api/ # 해당 스케줄 핸들러
schedule: every day 03:00 # 메일 새벽 3시
timezone: Asia/Seoul # timezone 은 서울
3. 해당 스케줄 핸들러(컨트롤러) 작성
3.1 해당 RequestMapping 컨트롤러 작성 완료
3.2 maven plug-in 으로 gcloud-sdk 를 사용중이므로
3.3 구글 서버로 배포하기 (소스)
3.3.1 소스 배포 : cmd 창을 열고 프로젝트의 pom.xml 위치로 이동해서 mvn appengine:deploy
3.3.2 소스 배포 : 이클립스 에서는 프로젝트 -> Run As -> Run Configuration -> Maven Build -> new
3.3.2.1 Name 은 적절한걸로
3.3.2.2 Base directory 는 ${project_loc}
3.3.2.3 Goals 는 appengine:deploy 작성 후 저장
3.3.2.4 이후에는 프로젝트 -> Run As -> Maven Build 해서 신규 생성한 빌드를 선택하면 서버로 배포 시작함.
3.4 구글 서버로 배포하기 (cron.yaml)
3.4.1 cmd 창을 열고 프로젝트의 \webapp\WEB-INF\cron.yaml 위치로 이동해서 gcloud app deploy cron.yaml
3.4.2 console.cloud.google.com -> App Engine -> 작업 대기열 -> 크론 작업 에 등록되면
cron.yaml 의 description 내용으로 목록에 나타난다.
3.4.3 "지금실행" 으로 실행여부 지켜보고 오류 있는지 "로그" 클릭해서 인스턴스 로그를 확인해본다.
'Cloud Platform > Google Cloud Platform' 카테고리의 다른 글
App Engine + Cloud SQL 설정 (0) | 2017.10.24 |
---|---|
Google App Engine vs Google Compute Engine (0) | 2017.02.24 |
app.yml vs appengine-web.xml vs web.xml (0) | 2017.02.20 |
Maven + App Engine Plugin 사용하기 (0) | 2017.02.09 |
App Engine + Maven + Spring + MyBatis + Cloud SQL(MySQL) in STS(Spring Tool Suite) (0) | 2017.01.23 |