继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Springboot单体架构搭建资料详解

慕码人8056858
关注TA
已关注
手记 1266
粉丝 350
获赞 1323
概述

本文提供了关于如何使用Spring Boot搭建单体架构的详细指南,涵盖了环境搭建、项目创建、基本功能实现以及部署运行等关键步骤。文中详细介绍了开发工具选择、JDK环境配置、Maven或Gradle配置等基础内容,同时也包括了Spring Boot单体架构搭建资料的全面介绍。

Spring Boot简介
什么是Spring Boot

Spring Boot是Spring框架的一个子项目,旨在简化Spring应用的初始配置和开发流程。它提供了一种快速构建独立的、生产级别的基于Spring的应用的方式。Spring Boot通过自动配置和约定优于配置的思想,极大地简化了Spring应用的开发过程。

Spring Boot的核心功能之一是自动配置。它可以根据应用的类路径中依赖的不同自动配置Spring应用。例如,如果应用中包含Spring Data JPA和一个数据库连接,则Spring Boot会自动配置JPA和数据库连接的相关属性。

Spring Boot的优势
  1. 快速启动:Spring Boot简化了Spring应用的配置,使得开发人员可以快速启动项目,无需繁琐的手动配置。
  2. 自动配置:Spring Boot可以自动配置大多数场景下的Spring应用,如数据库连接、安全设置等。
  3. 嵌入式服务器:Spring Boot支持内嵌的Web服务器,如Tomcat或Jetty,使得构建可独立运行的War包变得简单。
  4. 起步依赖:通过使用起步依赖,开发者可以快速搭建应用所需的依赖关系,避免了复杂的依赖版本管理。
  5. Actuator支持:Spring Boot Actuator提供了生产就绪的功能,如健康检测、指标收集、环境信息等。
  6. 全面的文档支持:Spring Boot提供了全面的文档和示例,使得开发者可以快速上手并进行开发。
Spring Boot的应用场景

Spring Boot适用于需要快速开发和部署的应用场景,特别适合于构建中小规模的应用。以下是一些典型的应用场景:

  1. Web应用:用于构建Web应用,如RESTful API、静态资源服务等。
  2. 数据库应用:支持多种数据库连接,如MySQL、PostgreSQL等。
  3. 安全应用:提供内置的安全管理功能,如认证、授权等。
  4. 微服务应用:虽然Spring Boot主要用于单体应用,但它也可以作为微服务的基础。
  5. 批处理应用:支持批处理任务,如定时任务、异步任务等。
环境搭建
开发工具选择

开发工具的选择对于开发效率有着直接的影响。以下是常用的开发工具:

  1. IntelliJ IDEA:一个功能强大的Java IDE,支持智能代码补全、代码格式化、代码重构等功能。
  2. Eclipse:一个流行的Java IDE,界面简洁,支持多种开发语言。
  3. Spring Tool Suite (STS):基于Eclipse的Spring集成开发工具,专门为Spring开发者设计。
  4. Visual Studio Code:虽然它主要针对Web前端开发,但通过安装Java插件,也可以用于Java开发。
JDK环境配置

安装Java Development Kit (JDK) 是开发Spring Boot应用的基础。以下是JDK的安装步骤:

  1. 访问Oracle官网或其他Java发行版提供商网站下载JDK。
  2. 解压下载的JDK包到指定目录。
  3. 配置环境变量。在Windows系统中,可以通过系统属性中的环境变量设置,添加JDK的安装路径到Path变量中。

例如,假设JDK安装在C:\Program Files\Java\jdk-11.0.1,则需要添加C:\Program Files\Java\jdk-11.0.1\bin到系统环境变量Path中。

Maven或Gradle配置

Maven和Gradle都是流行的构建工具,用于管理项目依赖和构建过程。

Maven配置

  1. 安装Maven:下载Maven安装包并解压到指定目录,如C:\Program Files\Apache Software Foundation\maven-3.6.3
  2. 配置环境变量
    • 在系统环境变量中添加MAVEN_HOME,值为Maven的安装目录。
    • 同时在Path变量中添加%MAVEN_HOME%\bin

例如:

MAVEN_HOME=C:\Program Files\Apache Software Foundation\maven-3.6.3
Path=%Path%;%MAVEN_HOME%\bin

Gradle配置

  1. 安装Gradle:下载Gradle安装包并解压到指定目录,如C:\Program Files\gradle-6.8.3
  2. 配置环境变量
    • 在系统环境变量中添加GRADLE_HOME,值为Gradle的安装目录。
    • 同时在Path变量中添加%GRADLE_HOME%\bin

例如:

GRADLE_HOME=C:\Program Files\gradle-6.8.3
Path=%Path%;%GRADLE_HOME%\bin
创建Spring Boot项目
使用Spring Initializr创建项目

Spring Initializr提供了一个在线的项目启动器,可以快速创建一个新的Spring Boot项目。以下是创建步骤:

  1. 访问Spring Initializr网站(https://start.spring.io/)。
  2. 选择项目配置:
    • 项目类型:Maven项目或Gradle项目。
    • 语言:Java。
    • Spring Boot版本:选择最新的稳定版本。
    • 组ID、Artifact ID等基本设置。
    • 添加所需依赖:例如Spring Web、Spring Data JPA、Thymeleaf等。

例如,创建一个简单的Web应用,可以选择以下依赖:

  • Spring Web:用于创建Web应用。
  • Spring Data JPA:用于数据库操作。
  • Thymeleaf:用于模板渲染。
  1. 点击"Generate"按钮,生成项目压缩包。
  2. 下载压缩包,并解压到本地开发环境。

示例代码

假设生成了一个简单的Spring Boot应用,其pom.xml文件可能如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>
</project>
导入项目到IDE

导入项目到IDE,以IntelliJ IDEA为例:

  1. 打开IntelliJ IDEA,选择File -> Open
  2. 选择解压后的项目目录,然后点击Open
  3. IntelliJ IDEA会自动检测到pom.xml文件,并提示导入Maven项目。
  4. 点击OK,IDEA会自动下载依赖并配置项目。
添加依赖

在创建项目时,Spring Initializr已经添加了一些基本依赖。如果需要添加更多依赖,可以在pom.xml文件中增加相应的依赖条目。

例如,添加一个新的依赖,如Lombok:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

添加完毕后,需要刷新Maven项目以下载并应用新添加的依赖,可以在IDEA中点击File -> Invalidate Caches / Restart

单体架构设计
单体架构概述

单体架构是一种传统的应用架构模式,将应用程序的所有功能打包到一个单独的可执行单元中。单体应用通常是一个单一的代码库,包含应用程序的所有部分,如业务逻辑、数据库访问和用户界面。

单体架构的优点

  1. 简单性:开发和部署简单,易于理解和维护。
  2. 启动速度快:由于应用规模较小,启动速度相对较快。
  3. 一致性:所有的团队成员都使用相同的代码库,可以保持一致性。

单体架构的缺点

  1. 扩展性差:随着应用规模的增大,扩展性变差,维护成本增加。
  2. 上线部署复杂:部署频率低,上线版本变更复杂。
  3. 测试和调试困难:随着应用规模的增大,测试和调试变得困难。

如何设计简单的单体架构

设计一个简单的单体架构,需要考虑以下几个方面:

  1. 模块划分:将应用划分为不同的模块,如业务逻辑模块、数据库访问模块、Web服务模块等。
  2. 数据层设计:选择合适的数据持久化方式,如JPA、MyBatis等。
  3. 接口设计:定义清晰的接口规范,便于模块之间的交互。
  4. 配置管理:使用Spring Boot的自动配置功能,统一管理应用配置。
  5. 日志和监控:集成日志和监控工具,便于问题排查和性能监控。

示例项目

假设我们设计一个简单的用户管理系统,包括用户注册、登录和信息查询等功能。

模块划分示例代码
  • Controller模块:处理HTTP请求。
  • Service模块:处理业务逻辑。
  • Repository模块:处理数据库操作。
示例代码
  • User实体类
    
    package com.example.demo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

private String email;

// getters and setters

}


- **UserRepository接口**
  ```java
  package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.demo.entity.User;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}
  • UserService类
    
    package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.repository.UserRepository;

@Service
public class UserService {

@Autowired
private UserRepository userRepository;

public User findUserByName(String name) {
    return userRepository.findByName(name);
}

}


- **UserController类**
  ```java
  package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.service.UserService;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user")
    public String getUserByName(@RequestParam String name) {
        User user = userService.findUserByName(name);
        return "User: " + user.getName();
    }
}
基本功能实现
创建Controller

Controller是Spring MVC中的一个核心组件,用于处理HTTP请求。在Spring Boot中,可以使用@RestController注解快速创建Controller。

示例代码

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

这个HelloController类定义了一个简单的RESTful接口,用于处理/hello GET请求,并返回字符串"Hello, World!"。

创建Service和Repository

Service层位于Controller和Repository层之间,负责处理业务逻辑。

Service层示例代码

package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.repository.HelloRepository;

@Service
public class HelloService {

    @Autowired
    private HelloRepository repository;

    public String sayHello() {
        return repository.getHello();
    }
}

Repository层负责数据访问,可以使用Spring Data JPA进行数据库操作。

Repository层示例代码

package com.example.demo.repository;

public class HelloRepository {

    public String getHello() {
        return "Hello, Repository!";
    }
}
实现简单的CRUD操作

CRUD(Create、Read、Update、Delete)操作是常见的数据库操作,Spring Data JPA提供了便捷的方式实现这些操作。

  1. 创建实体类
package com.example.demo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // getters and setters
}
  1. 创建Repository接口
package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.demo.entity.User;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}
  1. 创建Service和Controller
package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.repository.UserRepository;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User findUserByName(String name) {
        return userRepository.findByName(name);
    }
}
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.service.UserService;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user")
    public String getUserByName(@RequestParam String name) {
        User user = userService.findUserByName(name);
        return "User: " + user.getName();
    }
}
部署与运行
打包项目

Spring Boot应用可以通过Maven或Gradle进行打包。打包过程将应用的所有依赖打包到一个单独的可执行Jar或War文件中。

Maven打包

mvn package

打包完成后,可以在target目录下找到生成的Jar文件。

Gradle打包

./gradlew bootJar

打包完成后,可以在build/libs目录下找到生成的Jar文件。

部署到Tomcat

将打包好的Spring Boot应用部署到Tomcat服务器,可以通过以下步骤进行:

  1. 解压Tomcat:下载并解压Tomcat到指定目录。
  2. 解压Spring Boot应用:将生成的Jar文件解压到Tomcat的webapps目录。
  3. 配置Tomcat:在conf/server.xml文件中配置对应的Context。
  4. 启动Tomcat:启动Tomcat服务器,访问部署的Spring Boot应用。

示例配置

假设解压的Jar文件名为demo-0.0.1-SNAPSHOT.jar,可以进行如下配置:

<Context docBase="demo-0.0.1-SNAPSHOT.jar" path="/demo" />

将上述配置添加到server.xml文件的<Host>元素下,并启动Tomcat服务器。

调试与监控

Spring Boot提供了Actuator模块,可以对应用进行调试和监控。

启用Actuator

pom.xmlbuild.gradle文件中添加Actuator依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

或者

implementation 'org.springframework.boot:spring-boot-starter-actuator'

启用Actuator后,可以在应用的/actuator路径下访问各种监控端点,如/actuator/health/actuator/metrics等。

调试示例

在IDE中启动应用,可以在断点处设置调试点,通过IDE的调试工具进行调试。

监控示例

访问http://localhost:8080/actuator/health,可以查看应用的健康状态。通过Actuator提供的其他端点,可以获取更多监控信息,如应用配置、线程状态等。

示例配置

application.properties中配置Actuator:

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

通过上述配置,可以方便地启动和监控Spring Boot应用。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP