Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
ArthurYang
Product and Topic Expert
Product and Topic Expert

本文档内容是基于我个人对SAP 业务技术平台(简称BTP)的理解产生的,目的是帮助您初步了解如何从零开始将Spring Cloud应用部署到BTP,阅读时间约为1小时。


 

本文档面向的人群是代码开发者,使用前提是您的BTP账号拥有 Cloud Foundry Runtime的权利,并且最好有过Spring 开发经验


 

本文档包含以下部分:


0.环境准备


1.代码生成及本地测试


2.云端部署及测试


 

如果您对BTP感兴趣,BTP个人精选内容目录 | SAP Blogs 可能有更多你需要的内容


 

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,感谢你的时间