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

springboot项目架构

前言

Spring Boot是一个开源的Java基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它简化了基于Spring的应用开发,你只需要“启动”即可。

一、springboot概述

  • 在 Spring Boot 出现之前,使用 Spring 框架开发应用程序时,开发人员需要花费大量时间进行复杂的配置,包括配置各种 XML 文件或者 Java 配置类来整合 Spring 的各个模块,如 Spring MVC、Spring Data 等。Spring Boot 的目标就是简化这一过程,减少配置的复杂性,让开发者能够快速启动项目并专注于业务逻辑的实现。
二、详细开发步骤
(一)环境搭建
  1. JDK 安装与配置
    确保 JDK 正确安装并配置了环境变量。可以通过在命令行中输入java -version来检查 JDK 是否安装成功以及版本信息。
  2. IDE 选择与安装
    • IntelliJ IDEA:一款功能强大的 Java 开发 IDE,具有智能代码补全、强大的调试功能等。安装后,可以根据个人喜好进行一些基本的设置,如设置主题、字体等。
    • Eclipse:也是广泛使用的 Java 开发工具,支持丰富的插件扩展。同样需要完成安装和基本的环境配置。
(二)创建 Spring Boot 项目
  1. 使用 Spring Initializr(在线方式)
    • Spring Initializr(https://start.spring.io/)是 Spring 官方提供的创建 Spring Boot 项目的工具。可以在网页上填写项目的基本信息,包括:
      • Group:一般是公司或组织的域名倒写,如com.example
      • Artifact:项目的名称,如myproject
      • Name:项目的显示名称,可以和 Artifact 相同。
      • Description:项目的描述信息。
      • Packaging:选择项目的打包方式,通常是jar(用于构建独立的可执行的 Java 应用程序)或war(用于部署到 Web 容器中),这里一般选择jar
      • Java 版本:选择合适的 Java 版本,如1117等。
    • 在 “Dependencies” 部分,添加所需的依赖。对于 Web 项目,必须添加 “Spring Web”。此外,还可以根据项目需求添加其他依赖,如数据库相关的依赖(Spring Data JPAMySQL Driver等)、安全相关依赖(Spring Security)等。
    • 点击 “Generate” 按钮,下载生成的项目压缩包,然后在 IDE 中解压并打开该项目。
  2. 使用 IDE 中的 Spring Initializr 插件(以 IntelliJ IDEA 为例)
    • 在 IntelliJ IDEA 中,选择 “File”->“New”->“Project”,在弹出的对话框中选择 “Spring Initializr”。
    • 在右侧的面板中,可以配置与在线 Spring Initializr 类似的项目信息和依赖,配置完成后点击 “Next” 和 “Finish” 按钮,IDE 会自动创建项目结构
(三)项目结构解析
  1. src/main/java
    这是项目的主要 Java 代码目录,所有的业务逻辑代码、控制器、服务层、数据访问层等代码都放在这里。代码一般按照包名进行组织,包名通常与项目的groupIdartifactId相关,如com.example.myproject.controllercom.example.myproject.service等。

  2. src/main/resources

    • application.properties 或 application.yml:这是 Spring Boot 的核心配置文件。可以在其中配置服务器端口(server.port)、数据库连接信息、日志级别等各种应用程序的配置参数。例如:
      • application.properties

    server.port=8081

    配置日志级别

    logging.level.com.example.myproject=DEBUG

  • application.yml

    server:
    port: 8081
    logging:
    level:
    com.example.myproject: DEBUG

  • static 目录(可选):用于存放静态资源,如 HTML、CSS、JavaScript 文件。当构建 Web 应用时,这些资源可以直接被访问。例如,可以将index.html放在static目录下,在浏览器中访问http://localhost:8080(假设应用运行在 8080 端口)时,会默认显示index.html

  • templates 目录(可选,当使用模板引擎时):如果使用了模板引擎(如 Thymeleaf、FreeMarker 等),可以将模板文件放在这个目录下。模板引擎可以将数据和模板结合生成动态的 HTML 页面。

  1. src/test/java
    用于存放单元测试和集成测试代码。可以使用 Spring 提供的测试框架以及一些测试库(如 JUnit、Mockito 等)来对项目中的各个组件进行测试。例如,可以编写一个简单的单元测试来测试HelloWorldController中的hello()方法:

    package com.example.myproject.controller;

    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.test.web.servlet.MockMvc;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

    @WebMvcTest(HelloWorldController.class)
    public class HelloWorldControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testHello() throws Exception {
        mockMvc.perform(get("/hello"))
              .andExpect(status().isOk())
              .andExpect(content().string("Hello, World!"));
    }
    

    }

(四)创建一个简单的 RESTful API(续)
  1. 控制器层(Controller)
    • 请求映射注解
      • @RestController@Controller@ResponseBody的组合注解。@Controller用于标记该类是一个 Spring MVC 的控制器,@ResponseBody表示方法的返回值直接作为 HTTP 响应体返回,而不是解析为视图名称。
      • @GetMapping@PostMapping@PutMapping@DeleteMapping等注解用于将 HTTP 请求映射到特定的方法。例如,@GetMapping("/hello")表示当接收到 HTTP GET 请求且路径为/hello时,执行对应的方法。这些注解可以接受额外的参数,如producesconsumes,用于指定响应和请求的媒体类型(如application/json)。
    • 方法参数绑定
      • 在控制器方法中,可以接受各种类型的参数。例如,可以接受请求路径中的参数(使用@PathVariable注解)、请求体中的参数(使用@RequestBody注解,一般用于接收 JSON 格式的数据)、请求参数(使用@RequestParam注解)等。
  2. 请求处理流程
    当客户端发送一个 HTTP 请求到 Spring Boot 应用时,Spring MVC 的DispatcherServlet会接收到请求,并根据请求的 URL 找到对应的控制器方法。方法执行完成后,将结果作为响应返回给客户端。
(五)数据库集成(以 MySQL 和 Spring Data JPA 为例,续)
  1. 实体类(Entity)

    • JPA 注解
      • @Entity注解表示这个类是一个 JPA 实体类,会被映射到数据库中的一张表。
      • @Id注解标记实体类的主键。
      • @GeneratedValue(strategy = GenerationType.IDENTITY)表示主键的生成策略是数据库自动生成(适用于 MySQL 的自增主键)。
      • 还可以使用其他注解来定义实体类的属性和数据库表的映射关系,如@Column(用于指定列名、长度等属性)、@OneToMany@ManyToOne等(用于定义实体之间的关联关系)。
  2. 数据访问层(Repository)

    • 继承 JpaRepositoryUserRepository接口继承自JpaRepository<User, Long>。这里User是实体类类型,Long是主键类型。JpaRepository提供了大量的方法来实现对数据库的基本操作,如findAll()findById()save()deleteById()等。
    • 自定义查询方法(可选):除了使用JpaRepository提供的默认方法外,还可以在Repository接口中定义自定义的查询方法。例如,如果要根据用户的名字查找用户,可以在UserRepository中添加以下方法:

    List findByName(String name);

Spring Data JPA 会根据方法名自动生成相应的 SQL 查询语句。
3.事务管理(自动配置):Spring Boot 与 Spring Data JPA 集成时,会自动配置事务管理。默认情况下,在@Service@Repository等注解标记的类中的方法,都会在一个事务中执行。如果需要对事务进行更精细的控制,可以使用@Transactional注解。

(六)项目打包与部署
  1. 打包
    在 IDE 中,可以使用 Maven 或 Gradle(根据项目创建时选择的构建工具)来打包项目。对于 Maven 项目,可以在命令行中进入项目根目录,然后运行mvn package命令。这会在target目录下生成一个可执行的jar文件(如果项目的Packaging设置为jar)。
  2. 运行
    可以在命令行中使用java -jar your_project_name.jar来运行打包后的项目。也可以将jar文件部署到服务器环境中,根据服务器的配置和需求来启动应用。

这是一个比较全面的 Spring Boot 项目开发介绍,实际项目中还可以根据具体需求进一步扩展和优化,比如添加缓存、消息队列、分布式配置等功能。


总结

本文围绕 Spring Boot 展开。首先介绍它是基于 Spring 框架的开源 Java 开发框架,目的是简化 Spring 应用开发中的配置难题,让开发者聚焦业务逻辑。

其特点众多:一是自动配置,按项目依赖自动配置 Spring 应用组件,遵循约定优于配置原则,如自动配置 Web 相关组件。二是有起步依赖,是精心挑选、相互兼容的依赖库集合,如spring-boot-starter-web包含构建 Web 应用所需依赖,避免版本冲突。三是内置服务器支持,能打包成可执行 JAR 并内置服务器(如 Tomcat、Jetty、Undertow),运行时自动启动,默认端口 8080。四是配置方式简化,可通过application.propertiesapplication.yml修改参数。五是有强大监控管理功能,Actuator 模块可查看应用状态、健康状况等。

在应用场景方面,可用于 Web 应用开发(包括简单 RESTful API 和复杂应用)、微服务架构(每个微服务可独立为 Spring Boot 应用,便于开发部署和通信)以及数据处理与持久化(结合 Spring Data 相关依赖与数据库交互)。

它与 Spring 框架关系紧密,构建于 Spring 之上,对其封装优化,保留并使用了 Spring 的核心概念,降低了开发门槛。


http://www.kler.cn/a/508633.html

相关文章:

  • 【12】Word:张老师学术论文❗
  • Java语言的数据结构
  • 【Flink系列】6. Flink中的时间和窗口
  • 【Mysql进阶知识】Mysql 程序的介绍、选项在命令行配置文件的使用、选项在配置文件中的语法
  • Autodl转发端口,在本地机器上运行Autodl服务器中的ipynb文件
  • Android 高版本如何获取App安装列表?
  • 【开源免费】基于Vue和SpringBoot的夕阳红公寓管理系统(附论文)
  • 在VMwareFusion中使用Ubuntu
  • RabbitMQ--发送方确认及消息重试
  • 数仓建模(三)建模三步走:需求分析、模型设计与数据加载
  • (二)异步处理机制(Asynchronous Processing)
  • Spring Boot 中logback无法对warn警告日志发送邮件
  • 使用SIPP发起媒体流性能测试详解
  • PyBroker:利用 Python 和机器学习助力算法交易
  • 自动驾驶占用网格预测
  • Ruby JSON 优化之路:性能提升的探索与实践
  • 文档智能:OCR+Rocketqa+layoutxlm <Rocketqa>
  • 【Kotlin】上手学习之控制流程篇
  • ReaderLM v2:HTML 转 Markdown 和 JSON 的前沿小型语言模型
  • 常见安全风险及防护(如CSRF,XSS) 配置SSL/TLS
  • 分类统计字符个数(PTA)C语言
  • mysql主从复制sql进程中断,报错Tablespace is missing for table ……
  • Vue 3 中的 defineExpose
  • C语言之字符函数和字符串函数(上)
  • Vue3实现表格搜索内容高亮
  • Kotlin Bytedeco OpenCV 图像图像57 图像ROI