bal*_*teo 5 cloud-foundry pivotal-web-services pivotal-cloud-foundry spring-cloud-task
我想在cloudfoundry上运行spring应用程序作为使用java buildpack的一次性任务.
请注意,我的应用程序不是Web应用程序,而是使用spring cloud任务的spring批处理应用程序.
这是我的清单:
---
buildpack: https://github.com/cloudfoundry/java-buildpack.git
memory: 1024M
env:
APPLICATION_URL: http://bignibou-server.cfapps.io/
APPLICATION_MAIL_NO_REPLY_ADDRESS: balteo@bignibou-server.cfapps.io
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
Run Code Online (Sandbox Code Playgroud)
每当我推送应用程序时,它都被检测为工作者应用程序:
App bignibou-batch is a worker, skipping route creation
Run Code Online (Sandbox Code Playgroud)
这就是我想要的.
但后来它尝试将批处理作为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)
Run Code Online (Sandbox Code Playgroud)
这不是我想要的......
所以我的问题是:
如何配置清单以便在不自动启动的情况下正确推送批处理应用程序 - 我只想将二进制文件推送到 cf,以便稍后可以运行任务...如何将 spring 批处理作为 cf 任务启动在cloudfoundry上?
为了运行任务,您需要部署一个应用程序并完全暂存(因此有一个 Droplet)。那么你就可以了cf run-task <app> <task-cmd>。
几个想法:
第一个选项,您可以使用像这样的manifest.yml:
---
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
Run Code Online (Sandbox Code Playgroud)
这将设置一个具有非常小的内存限制的应用程序和一个基本上永远不执行任何操作的命令(永远部分是关键,以便应用程序将完全暂存并启动)。我们还将健康检查设置为none和no Route,这样就不会绑定路由,也不做TCP健康检查。您可以选择设置您的构建包。
然后跑cf push。该应用程序应该可以正常启动并启动。之后您可以cf run-task根据需要多次。您可以选择停止该应用程序。
第二个选项,只需推送您的应用程序,而不进行任何特殊的 manifest.yml 配置。该应用程序应该正确地运行,无法开始运行,然后在失败后您可以运行cf stop该应用程序。从那里开始,您应该可以根据cf run-task需要多次操作。
您也许还可以直接使用 v3 APIcf curl ,这将为您提供一些额外的灵活性,但此时所有交互都是手动的。
如果您想查看如何使用的具体示例cf run-task,请参阅 Selwyn 的回答。
| 归档时间: |
|
| 查看次数: |
3329 次 |
| 最近记录: |