欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 关于 Spring Boot + Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明,涵盖从开发到生产部署的全流程

关于 Spring Boot + Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明,涵盖从开发到生产部署的全流程

2025/4/18 23:56:01 来源:https://blog.csdn.net/zp357252539/article/details/147121221  浏览:    关键词:关于 Spring Boot + Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明,涵盖从开发到生产部署的全流程

以下是关于 Spring Boot + Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明,涵盖从开发到生产部署的全流程:


1. 打包

1.1 后端(Spring Boot)

打包方式

使用 Maven 或 Gradle 打包成可执行的 JAR/WAR 文件

<!-- pom.xml 配置 Spring Boot Maven 插件 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

执行命令:

mvn clean package  # 生成 target/*.jar 文件

Docker 包装

创建 Dockerfile

# 使用官方 JDK 基础镜像
FROM openjdk:8-jdk-alpine
# 复制构建好的 JAR 包
COPY target/*.jar app.jar
# 暴露端口
EXPOSE 8080
# 运行命令
ENTRYPOINT ["java", "-jar", "app.jar"]

1.2 前端(Vue)

打包配置

使用 Vue CLI 的 build 命令生成静态资源:

npm run build  # 生成 dist/ 目录

Vue 配置示例(vue.config.js)

module.exports = {// 指定输出目录outputDir: 'dist',// 静态资源公共路径(用于部署到子路径)publicPath: process.env.NODE_ENV === 'production' ? '/vue/' : '/',// 配置代理解决开发环境跨域devServer: {proxy: {'/api': {target: 'http://localhost:8080',changeOrigin: true,pathRewrite: { '^/api': '' }}}}
};

2. 测试

2.1 后端测试

单元测试(JUnit + Mockito)

@SpringBootTest
class UserControllerTest {@Autowiredprivate UserController userController;@MockBeanprivate UserService userService;@Testvoid testGetUser() {// 模拟 UserService 的返回值when(userService.getUser(1L)).thenReturn(new User(1L, "John"));// 调用 Controller 方法ResponseEntity<User> response = userController.getUser(1L);// 断言结果assertEquals("John", response.getBody().getName());}
}

集成测试(SpringBootTest)

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ApplicationTests {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic void testHealthCheck() {ResponseEntity<String> response = restTemplate.getForEntity("/health", String.class);assertEquals(200, response.getStatusCodeValue());}
}

性能测试(JMeter)

  • 使用 JMeter 脚本模拟高并发请求,测试接口响应时间。
  • 配置线程组、HTTP 请求、断言和监听器(如聚合报告)。

2.2 前端测试

单元测试(Jest)

// user.test.js
import { getUser } from './user';test('getUser should return user data', () => {expect(getUser(1)).toEqual({ id: 1, name: 'Alice' });
});

E2E 测试(Cypress)

// cypress/integration/example_spec.js
describe('访问首页', () => {it('加载首页并验证标题', () => {cy.visit('/');cy.get('h1').contains('欢迎来到 Vue 应用');});
});

静态代码分析(ESLint)

package.json 中配置:

{"eslintConfig": {"extends": ["plugin:vue/vue3-essential","eslint:recommended"]}
}

3. 监控

3.1 后端监控

Spring Boot Actuator

  • 依赖配置

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
  • 配置 application.yml

    management:endpoints:web:exposure:include: "health,info,metrics"
    
  • 常用端点

    • /actuator/health:健康检查。
    • /actuator/metrics:性能指标(如内存、CPU、HTTP 请求耗时)。

Prometheus + Grafana

  • 集成 Prometheus
    添加依赖:

    <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
    

    访问 /actuator/prometheus 获取指标数据。

  • Grafana 配置:通过 Prometheus 数据源创建仪表盘。

日志监控(ELK Stack)

  • 日志配置(Logback)
    <configuration><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>localhost:4560</destination></appender><root level="INFO"><appender-ref ref="LOGSTASH" /></root>
    </configuration>
    

3.2 前端监控

错误跟踪(Sentry)

  • Vue 插件配置
    import * as Sentry from '@sentry/vue';Sentry.init({dsn: 'https://your-dsn@o123.ingest.sentry.io/456',integrations: [new Sentry.BrowserTracing(),new Sentry.Vue({ Vue })],
    });
    

性能监控(APM)

  • 使用 New RelicDatadog 的前端 SDK 监控页面加载时间、API 响应时间。

4. 预先编译

4.1 后端预编译

  • Maven 编译阶段

    mvn compile  # 仅编译 Java 代码
    
  • 构建缓存:利用 Maven 的 ~/.m2/repository 缓存依赖,减少重复下载。

4.2 前端预编译

Webpack 配置优化

  • 代码分割(Code Splitting)

    // vue.config.js
    chainWebpack(config) {config.optimization.splitChunks({chunks: 'all',minSize: 30000,minChunks: 1,maxAsyncRequests: 5,maxInitialRequests: 3,automaticNameDelimiter: '~',name: true,cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,priority: -10},default: {minChunks: 2,priority: -20,reuseExistingChunk: true}}});
    }
    
  • Tree Shaking:通过 ES6 模块化自动删除未使用的代码。

  • 环境变量管理

    # .env.development
    VUE_APP_API_URL=http://localhost:8080/api
    

5. 容器部署

5.1 Docker 部署

Dockerfile(后端)

# 基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 复制构建好的 JAR 包
COPY target/*.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
CMD ["java", "-jar", "app.jar"]

Dockerfile(前端)

# 使用 Nginx 作为静态资源服务器
FROM nginx:alpine
# 复制 Vue 打包后的 dist 目录到 Nginx 默认目录
COPY dist/ /usr/share/nginx/html/
# 暴露端口
EXPOSE 80

Docker Compose(多服务部署)

version: '3'
services:backend:build: ./spring-bootports:- "8080:8080"environment:SPRING_PROFILES_ACTIVE: prodfrontend:build: ./vueports:- "80:80"

5.2 Kubernetes 部署

部署 YAML 文件

# 后端 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: spring-boot-deploy
spec:replicas: 3selector:matchLabels:app: spring-boottemplate:metadata:labels:app: spring-bootspec:containers:- name: spring-bootimage: your-registry/spring-boot:latestports:- containerPort: 8080
---
# 前端 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: vue-deploy
spec:replicas: 2selector:matchLabels:app: vuetemplate:metadata:labels:app: vuespec:containers:- name: vueimage: your-registry/vue:latestports:- containerPort: 80
---
# 服务(Service)
apiVersion: v1
kind: Service
metadata:name: spring-boot-service
spec:selector:app: spring-bootports:- protocol: TCPport: 8080targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: vue-service
spec:selector:app: vueports:- protocol: TCPport: 80targetPort: 80
---
# Ingress(路由配置)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-service
spec:rules:- http:paths:- path: /pathType: Prefixbackend:service:name: vue-serviceport:number: 80- path: /apipathType: Prefixbackend:service:name: spring-boot-serviceport:number: 8080

5.3 CI/CD 流水线(GitHub Actions)

示例工作流(.github/workflows/ci-cd.yml)

name: CI/CD Pipelineon:push:branches: [ main ]jobs:build-backend:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Set up JDK 11uses: actions/setup-java@v2with:java-version: '11'distribution: 'adopt'- name: Build with Mavenrun: mvn clean package -DskipTestsbuild-frontend:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Install Node.jsuses: actions/setup-node@v3with:node-version: '16'- name: Install dependenciesrun: npm install- name: Build Vuerun: npm run builddeploy:needs: [build-backend, build-frontend]runs-on: ubuntu-lateststeps:- name: Push Docker Imagesuses: docker/build-push-action@v3with:context: ./spring-bootpush: truetags: registry.example.com/spring-boot:latestenv:REGISTRY_USER: ${{ secrets.REGISTRY_USER }}REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}- name: Deploy to Kubernetesrun: |kubectl apply -f k8s/deployment.yamlkubectl rollout status deployment/spring-boot-deploykubectl apply -f k8s/frontend-deployment.yamlkubectl rollout status deployment/vue-deploy

6. 总结

  1. 打包:后端用 Maven/Gradle,前端用 Vue CLI,生成可部署的 JAR 和静态资源。
  2. 测试:后端用 JUnit + Mock,前端用 Jest + Cypress。
  3. 监控:后端用 Actuator + Prometheus/Grafana,前端用 Sentry + APM。
  4. 编译优化:代码分割、Tree Shaking、环境变量管理。
  5. 部署:Docker 包装 + Kubernetes 部署,结合 CI/CD 实现自动化流水线。

通过以上步骤,可以高效地完成前后端分离应用的开发、测试、监控和部署。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词