Spring Boot微服务,Docker和Kubernetes研讨会–第一部分

在本系列研讨会中,我们将使用spring boot,docker构建一些微服务,然后将它们部署到kubernetes中。 因此,让我们开始吧。

首先,我们需要定义一个问题陈述。 可以说我们要建立一个订单管理系统。

识别域

第一步将是了解需要哪些域,为简单起见,假设我们需要以下域:

命令
产品展示
客户或用户 购物车

现在我们知道我们正在构建什么,让我们开始开发。

在本研讨会中,我们将使用以下内容

用于微服务的Spring Boot
数据库的Postgres
构建的摇篮 Docker容器

第一微服务:产品
让我们为产品构建第一个微服务,我们将其称为产品服务,其中将包含产品的详细信息。

步骤1:使用spring初始化程序设置spring boot应用程序。
转到https://start.spring.io/并使用Java和SpringBoot 2.1.0生成gradle项目,并提供以下值:

群组ID:com.anirudhbhatnagar
工件:productService
dependecies:Web,Jpa,postgresSQL

单击生成项目,然后下载压缩的项目。 创建一个名为“ order_management_system”的新目录。 将项目解压缩到一个文件夹中,然后将其内容复制到这个新目录中。

将项目导入到您喜欢的IDE中,我们很容易开始。 通过在终端中运行项目来检查安装程序是否运行正常:

./gradlew build

由于DataSourceBeanCreationException,构建将失败,这是因为我们在项目中添加了PostgresSQL依赖关系,但没有通过提供数据库凭证及其uri配置数据源。 让我们在下一步中做。

步骤2:配置数据库
我们需要一个数据库来保存产品服务的产品详细信息。
为此,我们需要两件事: –正在运行的postgres数据库 –在Spring配置其详细信息 首先创建一个本地postgres数据库。 我们可以使用docker映像来运行本地postgres DB。 为了使postgres数据库服务器作为docker映像运行,我们需要在系统中安装docker。 使用此链接在您的mac中安装docker(在Windows和Linux中可以找到类似的链接)。 在您的机器上安装docker之后。 拉出最新的postgres映像,然后在本地运行。 我们还将使用用户名和密码初始化数据库。 在终端中运行以下命令:

$ docker run --name oms_postgres -p 5432:5432 -e POSTGRES_USER=dbuser -e POSTGRES_DB=products_db -e POSTGRES_PASSWORD=password -d postgres

这将在您本地的端口5432上启动一个postgres服务器,并用用户名“ dbuser”和密码“ password”初始化一个空的数据库“ postgres_db”。 一旦数据库启动并运行,我们现在将配置Spring Boot应用程序的数据源。 使用Spring Boot的一种方法(也许是最简单的一种方法)是在application.properties文件中定义数据源URI和数据库凭据。 Spring Boot将使用这些凭据自动配置数据源。

打开项目中的application.properties文件,然后添加以下内容:

spring.datasource.url=jdbc:postgresql://localhost:5432/products_db
spring.datasource.username=dbuser
spring.datasource.password=password
spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

现在,我们已经为应用程序配置了数据库,让我们再次运行gradle构建。 建立:

./gradlew build

如果一切正常,那么这次构建应该可以通过。 跑 :

./gradlew bootRun

现在,我们将在以下位置运行一个应用程序: http:// localhost:8080 /,但是由于我们尚未实现任何服务,因此它将提供一个404。为了使其正常工作,请添加一些代码。

注意:如果您使用的是postgres版本,则可能会出现以下错误:

java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.

出现此异常是因为Atomikos支持的JPA(休眠)正在尝试验证PostgreSQL CLOB功能。 JDBC驱动程序未实现此功能,因此驱动程序会引发不重要的异常。 要解决此问题,请将以下内容添加到application.properties文件中:

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

这将禁用驱动程序的功能检测(无论如何我们都不会使用此功能)

步骤3:在产品服务中添加代码
现在我们的服务和数据库已设置完毕,我们可以开始为产品服务编写一些代码。 在“ com.anirudhbhatnagar.productService”包中创建一个名为“ domain”的包,并创建一个新的Java类“ Product”,其属性为:

id
name
description
sku

Lombok
我们将使用Lombok为我们的bean添加构造函数,getter,setter和builder方法。 要使用lombok,请将其依赖项添加到build.gradle文件中:

compileOnly 'org.projectlombok:lombok:1.18.4'

在“产品”类上添加注释

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class Product {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;private String name;private String description;private String sku;
}

注释的含义:
1. @Entity告诉spring boot JPA将此类视为一个实体,并将其持久保存在数据库中。
2. @Builder –这个lmobok注释将builder方法添加到我们的类中,以使用Builder模式创建对象。 3. @AllArgsConstructor –此lmobok批注将所有参数构造函数添加到类中,Builder方法需要此方法。 4. @NoArgsConstructor –该lmobok批注为该类添加了默认构造函数,JPA需要此构造函数来获取实体。 5. @Getter –这个lombok注释将getters添加到类中的所有字段,这是获取产品的各个属性所必需的,Jackson也使用此方法对字段进行序列化/反序列化。

为了在数据库中创建该表,我们需要将jpa hibernate auto-ddl设置为true。 为此,将以下行添加到application.properties文件:

spring.jpa.hibernate.ddl-auto =创建

我们还在字段Id中添加了@GeneratedValue和@Id,以告诉hibernate在表中创建新条目时自动为id生成值。

添加控制器
添加一个控制器以实现公开的Web服务,并使用Jackson来对请求进行序列化/反序列化。 在“ com.anirudhbhatnagar.productService”包中创建一个名称为“ controller”的包,并在其中创建一个新的Java类“ ProductController”。

用“ @RestController”注释该类,以将该类扩展为公开Web服务的Servlet。 用注解“ @GetMapping”创建端点

@RestController
public class ProductController {@GetMapping("/products")public List getProducts() {return Collections.EMPTY_LIST;}@PostMapping("/products")public Product save(@RequestBody Product product) {return null;}
}

添加存储库
添加JPA存储库以将产品持久存储在数据库中。 在“ com.anirudhbhatnagar.productService”包中创建一个名称为“ repository”的包,并在其中创建一个新接口“ ProductRepository”:

public interface ProductRepository extends JpaRepository {
}

将productRepository注入ProductController,以便我们可以使用ProductController中的productRepository将在控制器中接收到的产品请求对象传递到存储库以进行获取和持久化。

@RestController
public class ProductController {private ProductRepository productRepository;@Autowiredpublic ProductController(ProductRepository productRepository) {this.productRepository = productRepository;}@GetMapping("/products")public List getProducts() {return productRepository.findAll();}@PostMapping("/products")public Product save(@RequestBody Product product) {return productRepository.save(product);}
}

现在,我们已经启动了产品服务,并在以下端点上运行:

GET / products –获取所有产品
POST / products –创建新产品

在这里查看整个代码。

Dockerise应用
在应用程序的根文件夹中创建一个名为“ dockerFile”的文件,并将以下内容添加到其中:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY build/libs/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8080

建立:

docker build .

跑 :

docker run -p 8080:8080 [image-id]

这应该在localhost:8080启动服务

测试应用程序:
使用邮递员或任何其他类似工具,提交此请求以创建产品:

Http POST http:// localhost:8080 / products。 标头:Content-Type application / json

{
"name" : "Nike shoes",
"description" : "mens shoes size 10",
"sku" : "1234asc"
}

可以通过以下方式获取产品:GET http:// localhost:8080 / products

在下一个研讨会中,我们将研究以下内容:

Spring Cloud,用于服务发现和客户端负载平衡的功能区
OpenFeign客户端
Kubernetes用于容器管理 API网关

翻译自: https://www.javacodegeeks.com/2018/11/spring-microservices-docker-kubernetes.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】广东开放大学 建筑设备 形成性考核

选择题 题目:对于以防止触电为目的的漏电保护器宜选用( )。(难度系数:易) 答案: A、动作时间0.1秒,动作电流15毫安 B、动作时间0.5.秒,动作电流30毫安 C、动作时间0.1秒&…

linux 信号量锁 内核,Linux内核信号量互斥锁应用

主要介绍了Linux 内核关于信号量,互斥锁等的应用内核同步机制-信号量/互斥锁/读-写信号量 sema ,mutex ,rwsem信号量通用信号量用户类进程之间使用信号量(semaphore)进行同步,内核线程之间也使用了信号量,一个线程完成了某一个动作就通过信号量告诉别的线程&#xf…

【渝粤题库】广东开放大学 标准化法律法规 形成性考核

​选择题 题目:WTO/TBT协议即《技术性贸易壁垒协议》是WTO对缔约国标准化工作的规定,因次也称为( )。 题目:对于违法犯罪行为的制裁和惩罚,体现了法律的( ) 题目:《上海市标准化条例》、《广东省产品质量监督条例》都属…

【渝粤题库】广东开放大学 电算化会计 形成性考核

选择题 题目: 会计作为一个提供( )为主的信息系统,长期以来在企业的经营管理中起着非常重要的作用 题目: 会计作为一个提供( )为主的信息系统,长期以来在企业的经营管理中起着…

stacktraces_Stacktraces告诉了事实。 但事实并非如此。

stacktraces我们公司致力于使软件错误的原因对开发人员和运营透明。 与替代解决方案相反, 我们在您发现源代码中恶意代码的地方指出了问题的所在 。 即使目前我们以检测内存泄漏的能力而闻名,但我们也正在扩展到其他领域。 为了给您一些有关我们研究方向…

【渝粤题库】广东开放大学 营销策划 形成性考核

选择题 题目:宝洁公司旗下的洗发水品牌有飘柔、潘婷、海飞丝等不同的子品牌,这些品牌分别面对不同的细分市场,宝洁公司的细分依据是( )。 题目:在春节、中秋节、情人节等节日即将来临的时候,许多…

Linux搜索无线网络命令,Linux操作系统的无线网络命令

rts:指定RTS/CTS握手方式,使用RTS/CTS握手会增加额外开销,但如果无线网络中有隐藏无线节点或者有很多无线节点时可以提高性能。后面的参数指定一个使用该机制的最小包的大小,如果该值等于最大包大小,则相当于禁止使用该…

【渝粤题库】广东开放大学企业标准化 形成性考核

​👉关注我,看答案👈 选择题 题目:企业标准应当报当地标准化行政主管部门审查。 题目:决策论、规划论、库存论,都是企业质量管理中可以借鉴使用的管理办法。 题目:6σ工程包括6σ改进和6σ策划两种类型。 题…

在JDK 12精简数字格式中使用最小分数数字

帖子“ 紧凑数字格式出现在JDK 12中 ”演示了对JDK 12中 NumberFormat的支持,以支持紧凑数字格式 。 该帖子中显示的示例仅使用NumberFormat的调用重载了NumberFormat的新重载getCompactNumberInstance(-)方法返回的NumberFormat实例,因此没有指定诸如最…

linux做定时数据库备份,Linux实现定时备份数据库

1.创建开启定时任务1.1crontab -e 打开定时任务编辑器1.2 0 1 * * * /备份脚本存放路径-用crontab -e 编辑器打开存放好1.3 crontab -l 查看定时任务1.4 service crond start 启动定时任务1.5 service crond status查看定时任务状态2.创建定时备份脚本touch test.sh 创建脚本&…

【渝粤题库】陕西师范大学151112 审计学作业(高起专)

《审计学》作业 一、单选题 1.注册会计师评估的重大错报风险与所需审计证据的数量呈( )变动关系。 2.注册会计师在检查登记入账的销货业务的真实性时,有效的做法是( )。 A.从主营业务收入明细账追查至发运凭证 B.从发…

【渝粤题库】陕西师范大学163210 旅行社经营与管理

单选题 中国国际旅行社成立于( )年。 A.1949 B.1954 C.1980 D.1923 新中国成立后,我国第一家旅行社是1949年成立的( )。 A.厦门华侨服务社 B.中国青年旅行社 C.中国旅行社 D.中国国际旅行社 ( )…

linux sftp自动输入密码,linux下实现sftp自动登录。

今天帮之前同事写一个sftp自动上传的脚本,因为sftp无法匿名登录,因此使用sftp时,每次都需要输入服务器密码,无法进行自动上传和下载文件,其中一种方法可以使用lftp这个就不在详细介绍了,现在介绍另外一种方…

【渝粤题库】陕西师范大学165107工作分析与设计作业(高起专)

《工作分析与设计》作业 单选题 1、工作分析最初产生于( )的工业企业中。 A.英国 B.德国 C.美国 D.日本 2、( )是组织中最基本的活动单元。 A.任务 B. 部门 C.工作 D.岗位 3、同一职系中职责繁简、难易、轻重及任职条件充分相似的…

【渝粤题库】陕西师范大学180210 国际市场营销学 作业

一、单选题 日本市场具有( )特点 A. 经营国际化 B. 市场渠道畅通 C. 销售季节性强 D. 垄断控制型市场国际工业品市场细分不可以依据( ) A. 用户规模 B. 用户购买力大小 C. 消费者年龄 D. 购买决策产生的过程文化环境是( ) A.静止的 B. 不会影响商业习俗的 C. 对任何…

使用ClickHouse UDF与OpenAI模型集成

本文字数:14683;估计阅读时间:37 分钟 作者:Dale McDiarmid 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shenzhen User Group第1届 Meetup 火热报名中&#x…

guava的正确引入方式_使用Guava的AbstractInvocationHandler正确完成代理

guava的正确引入方式不太经常,但有时我们被迫使用java.lang.reflect.Proxy编写自定义动态代理类 。 这种机制实际上没有任何魔术,即使您永远不会真正使用它,也值得知道–因为Java代理在各种框架和库中无处不在。 这个想法很简单:…

vba执行linux命令,如何使用vba的shell()运行参数的.exe?

我有一个目标文件路径的结构如下例所示。C:\Program Files\Test\foobar.exe /G我需要做的就是使用vba的shell()命令来执行这个文件。如何格式化文件路径以告诉Shell()有一个参数,它需要调用与运行.exe我已经阅读/尝试(无效)在下面的结果在右边。file ""&…

【渝粤题库】陕西师范大学200271 微分几何 作业(专升本)

《微分几何》作业 一. 填空题 曲面的第一基本形式为( )。空间曲线的基本公式是( )。曲面在任一点(u,v)的单位法向量公式为( )空间曲线的切向量为( &#xff…

【渝粤题库】陕西师范大学200771 可视化程序设计

《可视化程序设计》作业 一、单项选择题 1、VB应用程序在( )模式下不能编辑代码和设计界面。 A 运行B 中断C 设计D 以上均不能 2、将列表框(List Box)上要显示的内容放到列表框控件上的方法是( )。 A Addit…