佛山网站建设公司电话,常用网站大全,漳浦县网站建设,个人信息网站html可以肯定地说#xff0c;如今微服务与云的结合风靡一时。 微服务的开发比以往任何时候都多#xff0c;从而导致应用程序部署数量增加。 在过去的十年中#xff0c;开发了诸如Docker和Kubernetes之类的容器化和编排工具#xff0c;从而使微服务模式真正易于采用。 本文将教… 可以肯定地说如今微服务与云的结合风靡一时。 微服务的开发比以往任何时候都多从而导致应用程序部署数量增加。 在过去的十年中开发了诸如Docker和Kubernetes之类的容器化和编排工具从而使微服务模式真正易于采用。 本文将教您如何使用能够与MySQL数据库交互的公开REST API生成功能全面的微服务并将其部署到本地Kubernetes集群。 这里的知识可以应用于几乎任何数据库类型例如OracleSQL ServerDB2等。 如果您在本文中遇到麻烦请随时参考源代码的最终版本该最终版本可在此GitHub存储库中找到。 速度是关键 作为开发人员我们在日常工作中力争的一件事就是缩短开发时间。 至此我们已经可以确定微服务的两个方面这将使我们的开发时间超出所需的时间 我们需要创建一个持久层 我们需要公开一个REST API 如果我要告诉您存在一种可以处理这些事情而无需编写任何代码的工具该怎么办 Speedment是一个Java ORM工具包和运行时旨在使开发人员能够超快速地创建超快速的应用程序。 Speedment使用本地Java Streams API进行数据库交互因此对于新手经验丰富的退伍军人以及介于两者之间的任何人都非常容易使用。 Speedment带有图形工具使开发人员能够在几秒钟内生成其数据库的Java表示。 此外Speedment的捆绑软件系统使开发人员可以轻松扩展基本Toolkit的基本功能。 Spring插件就是这种增强功能之一它使开发人员能够生成功能齐全的CRUD REST API以便与他们的数据库进行交互。 在本文的其余部分您将学习如何使用Speedment Tool生成有效的REST微服务并将其部署到Kubernetes集群。 如果您总体上对Speedment感兴趣可以在在线手册中找到带有示例的详细文档。 入门 通过Maven分发Speedment是免费安装的但需要Java 8或更高版本。 首先请转到Speedment Initializer 在这里您将能够下载具有创建微服务所需的所有依赖项的项目模板。 这些是我们将在示例中使用的设置 如果您的设置不同例如数据库不同请确保在初始化程序中应用适当的更改。 完成项目配置后单击“下载”按钮并解压缩下载的zip文件。 要启动Speedment Tool请从终端执行以下命令 mvn speedment:tool 如果这是您第一次运行Speedment Tool则会要求您连接到数据库。 我们正在运行香草MySQL 我们本地计算机上的Sakila示例数据库 因此auth信息如下所示 填写必填字段后单击“连接”按钮。 如果您提供的身份验证信息正确则会显示以下屏幕 生成微服务 通过Speedment Tool连接到数据库后即可开始配置可用的各种选项。 您可以使用许多选项但是出于本文的目的我们将重点介绍公开REST API所需的选项。 要启用REST API生成请在树视图中单击“项目”节点然后选中“启用REST”选项 我们还启用了“生成REST文档”选项以自动为我们的REST API生成OpenAPI文档。 此选项不是强制性的但最终使我们可以更轻松地测试API。 下一步是可选的但它将使我们的REST路由在美学上更具吸引力。 转到树视图中的数据库架构节点然后将REST Endpoint的值设置为斜杠/。 默认情况下架构名称包含在生成的REST路由中此修改会将其删除。 接下来我们将为下表启用REST控制器的生成 演员 类别 顾客 电影 员工 商店 无论使用哪个表格启用控制器生成的步骤都是相同的。 因此我们仅在Actor表上进行演示。 单击树视图中的Actor表并启用Generate RestController选项。 反过来这将为该表启用几个与REST相关的选项。 您应该启用的我们感兴趣的选项是 REST启用清单 REST启用GET REST启用创建 REST启用更新 REST启用DELETE 我们还将REST端点从/ actor重命名为/ actors同样仅出于美观目的。 默认情况下REST端点的名称与其关联的表相同。 在我们的例子中重命名是有道理的因为当我们访问/ actors端点时将检索参与者列表而不是单个参与者。 继续并对上面列出的其他表重复这些步骤。 完成后单击“生成”按钮。 这将生成数据库的Java表示以及必要的REST配置和控制器。 运行微服务 如果我们现在就按原样运行应用程序则很有可能会崩溃。 这是因为我们尚未指定应用程序用于连接数据库的密码。 当我们生成应用程序时暴露了许多特定于Speedment的应用程序属性。 其中一个属性就是spring.speedment.password属性我们可以使用它来设置Speedment连接到数据库所使用的密码。 有两种方法可以指定应用程序属性。 我们将在application.properties文件中定义它们您应该在应用程序的resources文件夹中创建该文件。 这是我们的application.properties文件的样子 应用程序属性文件– START spring.application.name 速度弹簧应用 spring.speedment.password sakila 应用程序属性文件– END Sakila数据库的默认密码是sakila但是如果您的数据库使用不同的密码请确保这些更改反映在application.properties文件中。 完成所有配置后即可运行应用程序。 这是通过从项目的根文件夹执行以下命令来完成的 mvn spring-boot:run 如果启用了“生成REST文档”选项则可以访问 http// localhost8080 / swagger-ui.html访问REST API文档 您可以手动执行请求也可以直接从Swagger UI执行请求。 如果要在浏览器中访问http// localhost8080 / actors 我们将获得一个JSON响应其中包含存储在数据库中的actor列表 [ { actorId: 1, firstName: PENELOPE, lastName: GUINESS }, { actorId: 2, firstName: NICK, lastName: WAHLBERG }, { actorId: 3, firstName: ED, lastName: CHASE }, ... TRUNCATED ... ] 部署前 在开始微服务的部署过程之前请确保您在本地计算机上安装了以下依赖项DockerkubectlMinikube和Skaffold。 Docker化我们的微服务 在将微服务实际部署到Kubernetes集群之前我们需要将其转换为Kubernetes可以实际使用的格式。 Kubernetes是一个容器编排工具因此Docker就是在这里帮助我们进行容器创建过程的。 在项目的根目录中创建一个包含以下内容的Dockerfile FROM openjdk:11-slim-buster EXPOSE 8080 ARG JAR_LOCATIONtarget ARG JAR_NAMEspeedment-spring-app ARG JAR_VERSION1.0.0 ADD ${JAR_LOCATION}/${JAR_NAME}-${JAR_VERSION}.jar app.jar ENTRYPOINT [java, -jar, app.jar, --spring.speedment.hostsakila] 导出的参数JAR_LOCATIONJAR_NAMEJAR_VERSION对于您的项目可能有所不同具体取决于您在pom.xml文件中提供的信息。 在项目的根目录中执行以下命令 mvn install 这将使用包含您的微服务的JAR文件创建一个目标文件夹。 确保文件的名称和版本与您放入Dockerfile中的信息匹配。 创建部署配置 我们将向Kubernetes集群部署两个映像Sakila数据库和微服务。 Sakila数据库已经有一个公开可用的Docker映像restsql / mysql-sakila。 但是我们需要为微服务构建映像。 这是我们之前创建的Dockerfile派上用场的地方。 稍后我们将使用一个名为Skaffold的工具为我们的微服务创建映像并将其在部署过程中使用。 首先在项目的根目录中创建一个名为k8s的文件夹。 您将在这里存储所有的Kubernetes 部署和服务配置。 我们将微服务和数据库配置分开因此在k8s文件夹中创建两个名为storage和app的文件夹。 现在我们继续进行Sakila数据库的配置。 在存储文件夹中我们将创建两个YAML文件– sakila-deployment.yml和sakila-service.yml。 sakila-deployment.yml文件将存储我们对Sakila数据库的部署配置。 由于这不是Kubernetes教程因此我们仅提供最终配置。 这是sakila-deployment.yml文件的最终外观 apiVersion: apps/v1 kind: Deployment metadata: name: sakila labels: storage: sakila spec: replicas: 1 selector: matchLabels: storage: sakila template: metadata: labels: storage: sakila spec: containers: - name: sakila image: restsql/mysql-sakila ports: - containerPort: 3306 这是最终的sakila-service.yml文件 apiVersion: v1 kind: Service metadata: name: sakila labels: storage: sakila spec: selector: storage: sakila ports: - name: database port: 3306 targetPort: 3306 我们的微服务的部署和服务配置几乎相同。 在app文件夹中创建一个名为speedment-spring-app-deployment.yml的YAML文件其内容如下 apiVersion: apps/v1 kind: Deployment metadata: name: speedment-spring-app labels: app: speedment-spring-app spec: replicas: 1 selector: matchLabels: app: speedment-spring-app template: metadata: labels: app: speedment-spring-app spec: containers: - name: speedment-spring-app image: speedment-spring-app-example ports: - containerPort: 8080 在同一文件夹中创建另一个名为speedment-spring-app-service.yml的YAML文件其内容如下 apiVersion: v1 kind: Service metadata: name: speedment-spring-app spec: selector: app: speedment-spring-app ports: - name: http port: 8080 targetPort: 8080 type: NodePort 这些是我们部署数据库和应用程序所需的所有配置。 添加部署配置后我们的文件结构应如下所示 启动集群 部署的准备工作几乎完成了。 我们需要做的最后一件事–启动本地Kubernetes集群。 这是通过执行以下命令来完成的 minikube start 部署 为了部署我们的数据库和应用程序我们将使用Skaffold。 在项目的根目录中创建一个名为skaffold.yml的文件其中包含以下内容 apiVersion: skaffold/v2alpha3 kind: Config build: artifacts: - image: speedment-spring-app-example docker: dockerfile: Dockerfile deploy: kubectl: manifests: - k8s/app/* - k8s/storage/* 完成此文件后我们终于可以进行部署了。 在项目根目录中执行以下命令 skaffold dev --port-forwardtrue 当我们执行此命令时将发生两件事 将从我们之前创建的Dockerfile创建一个Docker映像 部署和服务将根据我们之前创建的配置进行创建 微服务启动后就可以像以前一样使用它。 现在唯一的区别是它是从Kubernetes集群运行的。 注意 Sakila数据库完全启动大约需要30-60秒。 由于我们的应用程序启动速度比Sakila数据库快得多因此它很可能崩溃并在数据库准备就绪之前重新启动几次。 摘要 以省时的方式创建应用程序有时可能很困难。 我们已经解释了如何从数据库生成微服务并将其部署到Kubernetes集群因此希望您已经学到了一些可以减少开发时间的知识。 我们希望您喜欢阅读本文并喜欢撰写本文。 可以找到本文源代码的最终版本 在这里 。 s Per Minborg 米斯拉夫·米利切维奇MislavMiličević 资源资源 Speedment Initializer能够生成项目模板 GitHub上的Speedment OpenSource 加速在线手册 Github仓库以及最终版本的源代码 Sakila示例数据库 翻译自: https://www.javacodegeeks.com/2020/04/java-cloud-how-to-quickly-create-a-kubernetes-ready-rest-microservice.html