4

java buildpackを使用してcloudfoundry上でSpringアプリケーションを1回限りのタスクとして実行したいとします。java buildpackを使用してクラウドファウンドリで春のアプリケーションを実行する方法

私のアプリはWebアプリケーションではなく、Springクラウドタスクも使用するSpringバッチアプリケーションです。ここで

は私のマニフェストです:

App bignibou-batch is a worker, skipping route creation 

私が欲しいものです:私はアプリをプッシュするたび

--- 
buildpack: https://github.com/cloudfoundry/java-buildpack.git 
memory: 1024M 
env: 
    APPLICATION_URL: http://bignibou-server.cfapps.io/ 
    APPLICATION_MAIL_NO_REPLY_ADDRESS: [email protected] 
    SPRING_PROFILES_ACTIVE: cloud 

applications: 
- name: bignibou-server 
    path: bignibou-server/build/libs/bignibou-server.jar 
    env: 
    APPLICATION_GOOGLE_API_KEY: ****************** 
- name: bignibou-batch 
    path: bignibou-batch/build/libs/bignibou-batch.jar 
    no-hostname: true 
    no-route: true 
    command: null 
    health-check-type: none 
    env: 
    JAVA_OPTS: -Dspring.batch.job.names=messagesDigestMailingJob 

、それが労働者のアプリとして検出されます。

しかし、それは見る(まだアプリを展開しながら)Webアプリケーションとしてバッチを起動しようとします:

私が欲しいものではありません
2017-03-24T22:33:50.828+01:00 [CELL/0] [OUT] Destroying container 
2017-03-24T22:33:50.854+01:00 [API/3] [OUT] Process has crashed with type: "web" 
2017-03-24T22:33:50.873+01:00 [API/3] [OUT] App instance exited with guid befc8bf2-d338-45e1-90b9-430ff3b09a3f payload: {"instance"=>"", "index"=>0, "reason"=>"CRASHED", "exit_description"=>"2 error(s) occurred:\n\n* Codependent step exited\n* cancelled", "crash_count"=>1, "crash_timestamp"=>1490391230813627797, "version"=>"8f92e459-a6c7-4558-bc0b-09ac398eb069"} 
2017-03-24T22:33:51.473+01:00 [CELL/0] [OUT] Successfully destroyed container 
2017-03-24T22:33:51.634+01:00 [CELL/0] [OUT] Creating container 
2017-03-24T22:33:52.478+01:00 [CELL/0] [OUT] Successfully created container 
2017-03-24T22:33:56.824+01:00 [APP/PROC/WEB/0] [OUT] JVM Memory Configuration: -XX:MaxMetaspaceSize=164239K -XX:ReservedCodeCacheSize=240M -XX:CompressedClassSpaceSize=25984K -Xmx295151K -XX:MaxDirectMemorySize=10M 
2017-03-24T22:33:56.827+01:00 [APP/PROC/WEB/0] [ERR] JVM Memory Configuration: -XX:ReservedCodeCacheSize=240M -XX:CompressedClassSpaceSize=25984K -Xmx295151K -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=164239K 
2017-03-24T22:33:59.073+01:00 [APP/PROC/WEB/0] [OUT] . ____ _ __ _ _ 
2017-03-24T22:33:59.073+01:00 [APP/PROC/WEB/0] [OUT] /\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
2017-03-24T22:33:59.073+01:00 [APP/PROC/WEB/0] [OUT] \\/ ___)| |_)| | | | | || (_| |)))) 
2017-03-24T22:33:59.073+01:00 [APP/PROC/WEB/0] [OUT] ' |____| .__|_| |_|_| |_\__, |//// 
2017-03-24T22:33:59.073+01:00 [APP/PROC/WEB/0] [OUT] =========|_|==============|___/=/_/_/_/ 
2017-03-24T22:33:59.073+01:00 [APP/PROC/WEB/0] [OUT] (()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
2017-03-24T22:33:59.075+01:00 [APP/PROC/WEB/0] [OUT] :: Spring Boot :: (v1.5.2.RELEASE) 
2017-03-24T22:33:59.266+01:00 [APP/PROC/WEB/0] [OUT] 2017-03-24 21:33:59.256 INFO 16 --- [ main] pertySourceApplicationContextInitializer : Adding 'cloud' PropertySource to ApplicationContext 
2017-03-24T22:33:59.381+01:00 [APP/PROC/WEB/0] [OUT] 2017-03-24 21:33:59.359 WARN 16 --- [ main] o.c.r.o.s.cloud.AbstractCloudConnector : No suitable service info creator found for service elasticsearch Did you forget to add a ServiceInfoCreator? 
2017-03-24T22:33:59.389+01:00 [APP/PROC/WEB/0] [OUT] 2017-03-24 21:33:59.388 INFO 16 --- [ main] nfigurationApplicationContextInitializer : Adding cloud service auto-reconfiguration to ApplicationContext 
2017-03-24T22:33:59.465+01:00 [APP/PROC/WEB/0] [OUT] 2017-03-24 21:33:59.451 INFO 16 --- [ main] com.bignibou.batch.Batch : Starting Batch on a1e87528-637d-4dae-62ab-0538e48fb49b with PID 16 (/home/vcap/app/BOOT-INF/classes started by vcap in /home/vcap/app) 

...

だから私の質問は以下のとおりです。

  • 私が自動的に起動しなくても正常にプッシュするバッチアプリケーションのための順序で私のマニフェストを設定するにはどうすればよい - 私はちょうど私が後にタスクを実行できるように、バイナリは、CFにプッシュしたい...
  • 春のバッチをcloudタスクでcfタスクとしてどのように起動できますか?バッチアプリが自動的に起動しなくても正常にプッシュするために

答えて

2

は、どのように私は順番に私のマニフェストを設定することができます - 私はちょうど私が後にタスクを実行できるように、バイナリは、CFにプッシュしたい... どのようにすることができます春のバッチをcloudfoundryのcfタスクとして開始しますか?

タスクを実行するには、アプリを展開して完全にステージングする必要があります(液滴があります)。あなたはcf run-task <app> <task-cmd>になります。

カップルのアイデア:

--- 
applications: 
- name: spring-music 
    memory: 32M 
    path: build/libs/spring-music.war 
    health-check-type: none 
    no-route: true 
    command: while [ 1 == 1 ]; do sleep 9999; done 
    buildpack: java_buildpack 

この意志のセットアップは非常に小さなメモリの制限付きアプリと、本質的に何もしないコマンド:

最初のオプションは、このようmanifest.ymlを使用することができます永遠に(永遠の部分は、アプリケーションが完全に起動して開始するようにキーです)。また、ヘルスチェックをnoneおよびno routeに設定して、ルートがバインドされず、TCPヘルスチェックも行われないようにします。必要に応じてビルドパックを設定することができます。

cf pushを実行します。アプリは起動してOKを開始する必要があります。その後、あなたは好きなだけ何度もcf run-taskすることができます。オプションでアプリを停止することもできます。

第2のオプションは、特別なmanifest.yml設定を行わずにアプリをプッシュするだけです。アプリは正しくステージングしてから、実行が失敗した後に失敗します。cf stopアプリです。そこから、あなたが望む数だけcf run-taskにできるはずです。

v3 API directlyを使用することもできますが、これにより柔軟性が向上しますが、この時点ではすべて対話がマニュアルで行われます。cf curl

+0

返信いただきありがとうございます。実行タスクにどのコマンドを渡すべきか説明してください。それは 'java -jar ...'ですか?瓶が液滴の中で爆発したように見える... – balteo

+2

これは文字通り、あなたがタスクを実行させたいというコマンドです。それは 'echo 1'と同じくらい簡単かもしれませんが、' java -jar ... 'でしょう。あなたは 'cf ssh'を使ってパスを修正する必要があります。 JavaビルドパックはPATHに 'java'を置かないので、参照時に完全パスまたは相対パスを使用する必要があります。あなたはまた、アプリケーションをステージングの出力を見ることができます、それはパス情報も持ってあなたのアプリを実行するためにビルドパックが生成されたコマンドが表示されます。 –

関連する問題