在我以前的文章中 ,我用几行代码开发了一个基于Spring Boot的简单微服务REST应用程序。 现在是时候将该应用程序放在云中了。 在本文的其余部分中,我想您已经为提供者配置了一个帐户。
关键云铸造厂
Pivotal Cloud Foundry是Pivotal的基于Cloud Foundry的云产品。 通过注册,您可以获得60天的免费试用期,我很乐意使用。
Pivotal CF需要本地可执行文件才能推送应用程序。 每个主要平台(Windows,Mac,Linux deb和Linux rpm)都有一个这样的可执行文件。 安装后,它需要使用与Pivotal CF帐户相同的凭据进行身份验证。
要进行推送,可以使用cf push
命令。 该命令至少需要应用程序名称,可以在命令行cf push myapp
或通过manifest.yml文件中提供。 如果没有提供清单,则每个文件(从命令启动位置)都将递归地推送到云中。 但是,在这种情况下,Pivotal CF将无法理解应用程序的格式。 让我们明确一点,在manifest.yml中提供名称和可执行JAR的路径:
---
applications:
-name:product
path:target/microservice-sample.jar
注意,我没有将版本放在JAR名称中。 默认情况下,Maven将只通过应用程序资源并通过Spring Boot插件生成标准JAR,这是一个胖JAR,其中包含所有必要的库。 最后的JAR是要推到Pivotal CF的JAR。 这需要对POM进行调整,以删除其中的版本名称:
<plugin>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-maven-plugin </artifactId>
<configuration>
<finalName> ${project.artifactId} </finalName>
</configuration>
</plugin>
此时调用cf push
会将胖的JAR推送到PivotalCF。 输出应显示如下内容:
Using manifest file /Volumes/Data/IdeaProjects/microservice-sample/manifest.yml Updating app product in org frankel / space development as [email protected] OK Uploading product... Uploading app files from: /Volumes/Data/IdeaProjects/microservice-sample/target/microservice-sample.jar Uploading 871.1K, 109 files Done uploading OK Stopping app product in org frankel / space development as [email protected] OK Starting app product in org frankel / space development as [email protected] -----> Downloaded app package (26M) -----> Java Buildpack Version: v3.2 | https://github.com/cloudfoundry/java-buildpack.git=3b68024 -----> Downloading Open Jdk JRE 1.8.0_60 from https://download.run.pivotal.io/openjdk/trusty/x86_64/openjdk-1.8.0_60.tar.gz (0.9s) Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.0s) -----> Downloading Open JDK Like Memory Calculator 2.0.0_RELEASE from https://download.run.pivotal.io/memory-calculator/trusty/x86_64/memory-calculator-2.0.0_RELEASE.tar.gz (0.0s) Memory Settings: -XX:MetaspaceSize=104857K -Xmx768M -XX:MaxMetaspaceSize=104857K -Xss1M -Xms768M -----> Downloading Spring Auto Reconfiguration 1.10.0_RELEASE from https://download.run.pivotal.io/auto-reconfiguration/auto-reconfiguration-1.10.0_RELEASE.jar (0.0s) -----> Uploading droplet (71M) 0 of 1 instances running, 1 starting 1 of 1 instances running App started OK App product was started using this command `CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.0_RELEASE -memorySizes=metaspace:64m.. -memoryWeights=heap:75,metaspace:10,native:10,stack:5 -memoryInitials=heap:100%,metaspace:100% -totMemory=$MEMORY_LIMIT) && SERVER_PORT=$PORT $PWD/.java-buildpack/open_jdk_jre/bin/java -cp $PWD/.:$PWD/.java-buildpack/spring_auto_reconfiguration/spring_auto_reconfiguration-1.10.0_RELEASE.jar -Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY org.springframework.boot.loader.JarLauncher` Showing health and status for app product in org frankel / space development as [email protected] OK requested state: started instances: 1/1 usage: 1G x 1 instances urls: product.cfapps.io last uploaded: Sun Sep 27 09:05:49 UTC 2015 stack: cflinuxfs2 buildpack: java-buildpack=v3.2-https://github.com/cloudfoundry/java-buildpack.git=3b68024 java-main open-jdk-like-jre=1.8.0_60 open-jdk-like-memory-calculator=2.0.0_RELEASE spring-auto-reconfiguration=1.10.0_RELEASE state since cpu memory disk details =0 running 2015-09-27 11:06:35 AM 0.0% 635.5M of 1G 150.4M of 1G
通过修改后的配置,Pivotal CF能够检测到它是Java Spring Boot应用程序并进行部署。 现在可以通过https://product.cfapps.io/products进行访问!
但是,此应用程序并未反映实际情况,因为它仍使用h2嵌入式数据库。 让我们将数据库与应用程序解耦,但仅当在云中时才应如此,因为h2仍应在本地使用。
第一步是在Pivotal CF中创建一个新的数据库服务。 这里没有什么花哨的,因为使用了JPA,我们将使用标准的SQL数据库。 市场上提供了ClearDB MySQL服务,免费提供了SparkDB。 让我们为我们的应用程序创建一个新实例,并为其指定一个相关名称(本例中为mysql-service
)。 可以在Pivotal CF GUI中或通过命令行完成。
第二步是将服务绑定到应用程序,也可以通过清单或在manifest.yml中声明它来实现。
第三步是实际使用它,并且借助Pivotal CF自动重新配置功能,此时无需执行任何操作 ! 在部署期间,平台将对应用程序进行内部检查,并用一个包装MySQL数据库的数据库替换现有的h2数据源。 可以通过检查执行器来断言(前提是已将其添加为依赖项)。
这是用于将Spring Boot应用程序推送到Pivotal CF的。 下周,让我们部署到Heroku来检查是否有任何差异。