当前位置: 首页 > news >正文

Java 语言特定指南

Java 语言特定指南

本 Java 入门指南将教您如何使用 Docker 创建一个容器化的 Spring Boot 应用程序。在本模块中,您将学习如何:

  • 使用 Maven 容器化并运行一个 Spring Boot 应用程序
  • 设置本地开发环境以将数据库连接到容器、配置调试器,并使用 Compose Watch 实现实时重新加载
  • 在容器中运行单元测试
  • 使用 GitHub Actions 为您的应用程序配置 CI/CD 流水线
  • 将容器化的应用程序本地部署到 Kubernetes 以测试和调试您的部署

完成 Java 入门模块后,您应该能够根据本指南提供的示例和说明来容器化您自己的 Java 应用程序。

容器化并运行 Spring Boot 应用程序

1. 准备现有的 Spring Boot 应用程序

确保您的项目结构类似于以下内容:

my-spring-boot-app/
├── src/
│   ├── main/
│   │   ├── java/
│   │   ├── resources/
│   ├── test/
├── pom.xml

2. 创建 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用 Maven 镜像构建项目
FROM maven:3.8.4-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests# 使用 OpenJDK 镜像运行应用程序
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

3. 构建 Docker 镜像

在项目根目录下运行以下命令以构建 Docker 镜像:

docker build -t my-spring-boot-app .

4. 运行容器

使用以下命令运行容器:

docker run -d -p 8080:8080 my-spring-boot-app

现在,您可以通过浏览器访问 http://localhost:8080 来查看您的应用程序。

设置本地开发环境

使用 Docker 容器设置本地开发环境有助于确保开发环境与生产环境一致。

1. 创建 docker-compose.yml 文件

在项目根目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容:

version: '3.8'
services:app:image: my-spring-boot-appports:- "8080:8080"volumes:- .:/appcommand: mvn spring-boot:rundb:image: postgres:13environment:POSTGRES_DB: mydbPOSTGRES_USER: userPOSTGRES_PASSWORD: passwordports:- "5432:5432"

2. 运行 Docker Compose

在项目根目录下运行以下命令启动开发环境:

docker-compose up

现在,您的应用程序将在 http://localhost:8080 上运行,您可以进行开发并实时查看更改。

在容器中运行单元测试

1. 修改 Dockerfile 以包括测试步骤

更新 Dockerfile 文件以包括测试步骤:

# 使用 Maven 镜像构建项目
FROM maven:3.8.4-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package# 使用 OpenJDK 镜像运行应用程序
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

2. 运行测试容器

使用以下命令运行测试:

docker run --rm -v $(pwd):/app -w /app maven:3.8.4-openjdk-11 mvn test

配置 CI/CD 流水线

使用 GitHub Actions 配置 CI/CD 流水线以自动化测试和部署过程。

1. 创建 GitHub Actions 工作流文件

在项目根目录下创建 .github/workflows/ci.yml 并添加以下内容:

name: CI/CD Pipelineon:push:branches:- mainpull_request:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Set up JDK 11uses: actions/setup-java@v2with:java-version: '11'- name: Build with Mavenrun: mvn clean package- name: Build Docker imagerun: docker build -t my-spring-boot-app .- name: Push Docker imageenv:DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}run: |echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdindocker tag my-spring-boot-app $DOCKER_USERNAME/my-spring-boot-app:latestdocker push $DOCKER_USERNAME/my-spring-boot-app:latest

确保在 GitHub 仓库中添加 Docker Hub 凭据作为秘密(secrets)。

部署到 Kubernetes

使用 Kubernetes 部署和管理容器化的 Java 应用程序。

1. 创建 Kubernetes 部署文件

在项目根目录下创建 k8s/deployment.yml 并添加以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-spring-boot-app
spec:replicas: 3selector:matchLabels:app: my-spring-boot-apptemplate:metadata:labels:app: my-spring-boot-appspec:containers:- name: my-spring-boot-appimage: <DOCKER_USERNAME>/my-spring-boot-app:latestports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: my-spring-boot-app-service
spec:type: NodePortselector:app: my-spring-boot-appports:- port: 8080targetPort: 8080nodePort: 30008

2. 部署到 Kubernetes

使用 kubectl 命令将应用程序部署到 Kubernetes 集群:

kubectl apply -f k8s/deployment.yml

您可以通过访问 http://<NODE_IP>:30008 查看应用程序。

通过上述步骤,您已经学会了如何容器化并运行一个 Spring Boot 应用程序,设置本地开发环境,使用容器运行测试,配置 CI/CD 流水线,并将应用程序部署到 Kubernetes。

相关文章:

Java 语言特定指南

Java 语言特定指南 本 Java 入门指南将教您如何使用 Docker 创建一个容器化的 Spring Boot 应用程序。在本模块中&#xff0c;您将学习如何&#xff1a; 使用 Maven 容器化并运行一个 Spring Boot 应用程序设置本地开发环境以将数据库连接到容器、配置调试器&#xff0c;并使…...

国内多个库被 rsc 钉上 Go 耻辱柱。。。

大家好&#xff0c;我是煎鱼。 这还是比较突然的&#xff0c;下午正努力打工。国内社区群里突然就闹腾起来了。 仔细一看&#xff0c;原来是 Go 核心团队负责人 rsc&#xff0c;又冷不丁搞大招 &#x1f605;。他直接把国内好几个知名库给直接钉上了 Go 源码库的耻辱柱上了。 如…...

elasticsearch源码分析-03选举集群状态

选举集群状态 es中存储的数据有一下几种&#xff0c;state元数据、lucene索引文件、translog事务日志 元数据信息可以分为&#xff1a; 集群层面的元信息-对应着metaData数据结构&#xff0c;主要是clusterUUid、settings、templates等索引层面的元信息-对应着indexMetaData数…...

MySQL 重要参数优化

max_connections = 3000 innodb_buffer_pool_size = 8G max_allowed_packet = 32M innodb_file_io_threads = 8 innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M 参数说明 max_connections = 3000 运行MySQL的最大连…...

软件测试之接口测试(Postman/Jmeter)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比如你需要从别的系统来…...

14 卡尔曼滤波及代码实现

文章目录 14 卡尔曼滤波及代码实现14.0 基本概念14.1 公式推导14.2 代码实现 14 卡尔曼滤波及代码实现 14.0 基本概念 卡尔曼滤波是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法。由于观测数据包括系统中的噪声和…...

计算机视觉 图像融合技术概览

在许多计算机视觉应用中(例如机器人运动和医学成像),需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量。 多视图融合可以提高图像的分辨率,同时恢复场景的 3D 表示。多模态融合结合了来自不同传感器的图像,称为多传感器融…...

计算机网络课程实训:局域网方案设计与实现(基于ensp)

文章目录 前言基本要求操作分公司1分公司2总部核心交换机配置实现内部服务器的搭建acl_deny部分用户与服务器出口出口防火墙配置 前言 本篇文章是小编实训部分内容&#xff0c;内容可能会有错误&#xff0c;另外ensp对电脑兼容性及其挑剔&#xff0c;在使用之前一定要安装好。…...

【安全开发】内网扫描器

文章目录 前言现实现的功能较少后序开发会逐步加入简单漏洞探探测和代理功能。 一、开发过程1.项目结构2.main.go3.core模块3.1 scanner.go3.2 service.go 4.bruteforc4.1 bruteforce.go 二、使用步骤 前言 为什么要写这个&#xff1f; fscna被杀的概率太高&#xff08;哪天二…...

ESP32-C3模组上跑通MQTT(5)

接前一篇文章:ESP32-C3模组上跑通MQTT(4) 本文内容参考: 《ESP32-C3 物联网工程开发实战》 一分钟了解MQTT协议 ESP32 MQTT API指南-CSDN博客 ESP-IDF MQTT 示例入门_mqtt outbox-CSDN博客 ESP32用自签CA进行MQTT的TLS双向认证通信_esp32 mqtt ssl-CSDN博客 特此致谢!…...

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器&#xff0c;也称为LED显示器&#xff0c;或点阵显示器&#xff0c;应用广泛。在…...

设计模式 - Observer Pattern 观察者模式

文章目录 定义观察者模式的实现构成构成UML图 观察者模式的代码实现场景代码实现 总结优点缺点应用场景 其他设计模式文章&#xff1a; 定义 观察者模式是行为型模式的一种&#xff0c;它定义对象间的一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;它…...

【面试系列】C++ 高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

程序猿大战Python——实现简单的图书馆系统操作

步骤1&#xff1a;安装和导入库 首先&#xff0c;确保已经安装了 pymysql 库。如果没有安装&#xff0c;请执行以下命令&#xff1a; pip install pymysql 然后&#xff0c;导入必要的库&#xff1a; import pymysql 步骤2&#xff1a;创建数据库和表的函数 编写一个函数来…...

液体粒子计数器的原理及常见型号选择 lighthouse代理商北京中邦兴业

​液体颗粒计数用于测量液体样品中颗粒的大小和分布。通过用激光二极管照射液体样品并检测散射光来测量颗粒分布和尺寸。散射光的性质与粒子大小的大小有关。液体颗粒计数器可用于批量取样或在线&#xff08;连续监测&#xff09;应用&#xff0c;如水处理厂&#xff0c;或用于…...

Java知识点整理 16 — Spring Bean

在之前的文章 Java知识点整理 8 — Spring 简介 中介绍了 Spring 的两大核心概念 IoC 和 AOP&#xff0c;但对 Spring Bean 的介绍不全面&#xff0c;本文将补充 Spring 中 Bean 的概念。 一. 什么是 Spring Bean 在 Spring 官方文档中&#xff0c;对 bean 的定义为&#xf…...

Nvidia Jetson/RK3588+AI双目立体相机,适合各种割草机器人、扫地机器人、AGV等应用

双目立体视觉是基于视差原理&#xff0c;依据成像设备从不同位置获取的被测物体的图像&#xff0c;匹配对应点的位置偏移&#xff0c;得到视差数据&#xff0c;进而计算物体的空间三维信息。为您带来高图像质量的双目立体相机&#xff0c;具有高分辨率、低功耗、远距离等优点&a…...

springboot使用feign调用不依赖cloud

在使用spring boot调用第三方api中&#xff0c;常用的是okhttp、apache http client等&#xff0c;但是直接使用下来还是有点繁琐&#xff0c;需要手动转换实体。 在springcloud中有个openfeign调用&#xff0c;第一次体验到调用接口还能这么丝滑。注解写道接口上&#xff0c;…...

springboot中使用springboot cache

前言&#xff1a;SpringBoot中使用Cache缓存可以提高对缓存的开发效率 此图片是SpringBootCache常用注解 Springboot Cache中常用注解 第一步&#xff1a;引入依赖 <!--缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId…...

Promise,async/await的运用

一&#xff0c;了解Promise Promise是异步编程的一种解决方案&#xff0c;它是一个对象&#xff0c;可以获取异步操作的消息&#xff0c;它的出现避免了地狱回调。 &#xff08;1&#xff09;Promise的实例有三个状态&#xff1a; Pending&#xff08;进行中&#xff09; Re…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...