本文档内容是基于我个人对SAP 业务技术平台(简称BTP)的理解产生的,目的是帮助您初步了解如何从零开始将Spring Cloud应用部署到BTP,阅读时间约为1小时。
本文档面向的人群是代码开发者,使用前提是您的BTP账号拥有 Cloud Foundry Runtime的权利,并且最好有过Spring 开发经验
本文档包含以下部分:
0.环境准备
1.代码生成及本地测试
2.云端部署及测试
BTP客户在获取BTP账户之后会收到邮件,内包含激活账号方式及自己的全局账号链接,关于如何从收到邮件开始直至获得BTP Cloud Foundry Runtime 权利,详询其他Blogs。
0.环境准备
我们选择
Spring initializer来创建项目框架
我这里使用的是JAVA17和Maven 3.5.3,请保证其相关环境变量配置正确,以便后续的使用
同时我选择使用Cloud Foundry Cli来将项目部署到BTP内,所以我安装了
cf7的脚手架
我的BTP环境已经配置了域名innolab.oncloud.top,涉及url的地方请自行修改为您的域名
1. 代码生成及本地测试
1.1 生成eureka服务端的代码框架:
打开
https://start.spring.io/,
Project选择Maven,Language选择Java,Spring Boot选择3.1.0,
Project MetaData分别为: Group=com.example, Artifact=eureka-server, name= eureka-server, Package Name= com.example.eureka-server
Packaging选择Jar, Java选择17
Dependencies添加Eureka Server
最后
单击Generate,生成项目压缩包,然后在你的IDE中打开解压后的项目结构
首先需要在Java主类中配置Eureka server:进入项目根目录下的src\main\java\com\example\eurekaserver路径,打开EurekaServerApplication.java文件,
在import部分添加一行:
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
在@SpringBootApplication下添加一行:
@EnableEurekaServer
再进入项目根目录下的src\main\resources路径,打开application.properties文件,将其内容替换为:
server.port=8761
spring.application.name=eureka-server
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
然后我们在项目根目录下执行
mvn spring-boot:run,然后浏览器打开
http://localhost:8761/,通过检查Eureka的UI是否已打开来确认是否已部署好
1.2 生成eureka客户端的代码框架:
打开
https://start.spring.io/,
Project选择Maven,Language选择Java,Spring Boot选择3.1.0,
Project MetaData分别为: Group=com.example, Artifact=eureka-client, name= eureka-client, Package Name= com.example.eureka-client
Packaging选择Jar, Java选择17
Dependencies添加Eureka Server
最后单击Generate,生成项目压缩包,然后在你的IDE中打开解压后的项目结构
首先需要在Java主类中配置Eureka Client:进入项目根目录下的src\main\java\com\example\eurekaclient路径,打开EurekaClientApplication.java文件,
在import部分添加一行:
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
在@SpringBootApplication下添加一行:
@EnableDiscoveryClient
再进入项目根目录下的src\main\resources路径,打开application.properties文件,将其内容替换为:
spring.application.name=eureka-client
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/
(这里的defaultZone代表了eureka服务端的地址)
接下来,我们先启动前文的eureka server,再启动这里的eureka client(mvn spring-boot:run),最后进入
localhost:8761的eureka UI来查看服务是否已经到Eureka注册好
如果可以看到Eureka-Client则说明注册成功
2.云端部署
我们现在已经在本地让两个服务运行并链接上了,但是要让其在云端也可以运行并链接还需要一些额外的步骤:
2.1 部署eureka服务端到云上
首先是application.properties部分,将其内容替换为:
在项目根目录新建一个manifest.yml文件,将其内容替换为:
---
applications:
- name: eureka-server-app
memory: 1024MB
host: eureka-server-app
path: target/eureka-server-0.0.1-SNAPSHOT.jar
buildpack: java_buildpack
env:
JBP_DEFAULT_OPEN_JDK_JRE: "{jre: {version: 17.+ }}"
(这里由于我使用的是JAVA 17,所以需要额外去选择buildpack和确定jre版本)
然后在eureka-server的根目录执行mvn clean package
再执行cf push
最后到BTP对应的space内找到该应用的URL,我这里是
https://eureka-server-app.innolab.oncloud.top/,浏览器内打开该URL可以看到Eureka的UI
但是现在其他应用还无法和这个Eureka Server进行动态的互动,所以我们需要将这个Eureka Server的URL注册为一个User Provided Service以提供给其他应用使用:
cf cups eureka-userProvided -p '{"url": "https://eureka-server-app.innolab.oncloud.top/eureka/"}'
2.2 部署eureka客户端到云上
由于之前eureka客户端是在本地寻找localhost:8761来注册自己,而在云上肯定不能保持原样,所以我们首先将application.properties的内容替换为:
spring.application.name=eureka-client
eureka.instance.nonSecurePort=80
eureka.instance.hostName=eureka-client
eureka.client.service-url.defaultZone=${vcap.services.eureka-userProvided.credentials.url}
(这里客户端会从变量中动态抽取eureka服务端的地址,变量中的eureka-userProvided就是我们之前注册的user provided类型的服务,服务内蕴含了eureka服务端的地址)
再在项目根目录新建一个manifest.yml文件,将其内容替换为:
---
applications:
- name: eureka-client-app
memory: 1024MB
host: eureka-client-app
path: target/eureka-client-0.0.1-SNAPSHOT.jar
buildpack: java_buildpack
env:
spring.profiles.active: cloud
JBP_DEFAULT_OPEN_JDK_JRE: "{jre: {version: 17.+ }}"
services:
- eureka-userProvided
(这里在services部分需要依赖我们先前创建的user provided类型的服务)
最后在eureka-client的根目录执行mvn clean package
再执行cf push
然后浏览器中打开eureka-server的UI,如果一切顺利,会显示服务已经注册好
关于本文内容有任何问题或见解,欢迎在评论区留下你的想法,如果时间紧迫,也可以直接联系到我 arthuryang1996@foxmail.com,感谢你的时间