SpringBoot 入门实践

news2024/9/21 13:56:29

Spring Boot 入门教程:从零开始构建你的第一个应用

Spring Boot 是基于 Spring 框架的开发框架,它旨在简化 Spring 应用的开发流程。通过 Spring Boot,你可以迅速构建基于 Spring 的独立应用,无需进行复杂的 XML 配置。本文将带你从零开始构建一个简单的 Spring Boot 应用,并结合一些实践经验,帮助你更好地掌握 Spring Boot 的核心概念。


1. 什么是 Spring Boot?

Spring Boot 是一个基于 Spring 框架的快速开发平台,旨在简化 Spring 应用的配置和部署过程。通过 Spring Boot,你可以:

  • 快速启动 Spring 应用程序。
  • 内嵌 Tomcat、Jetty 或 Undertow,无需单独安装容器。
  • 通过自动配置,大大减少 XML 和注解配置。

2. 创建 Spring Boot 项目

创建 Spring Boot 项目可以通过以下几种方式:

  • Spring Initializr:Spring 官方提供的项目生成工具,支持生成基于 Maven 或 Gradle 的项目。
  • IDE:如 IntelliJ IDEA、Eclipse 等 IDE 也提供了直接创建 Spring Boot 项目的功能。
  • 命令行工具:使用 Spring Boot CLI(Command Line Interface)创建项目。

使用 Spring Initializr 创建项目

  1. 打开 Spring Initializr。
  2. 选择项目类型(Maven/Gradle)、语言(Java)、Spring Boot 版本。
  3. 填写项目名称、包名等元信息。
  4. 在依赖管理中,选择你需要的依赖,例如 Spring Web 用于构建 Web 应用。
  5. 点击 Generate,下载并解压项目。

在项目根目录下,执行以下命令来运行项目:

./mvnw spring-boot:run

3. Spring Boot 项目结构

Spring Boot 项目的基本结构如下:

src
 ├── main
 │   ├── java
 │   │   └── com.example.demo
 │   │       └── DemoApplication.java
 │   └── resources
 │       └── application.properties
  • DemoApplication.java:项目的入口类,包含 main 方法。
  • application.properties:配置文件,用于配置数据库连接、日志等。

示例:一个典型的入口类 DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4. Spring Boot 核心概念

4.1 自动配置(Auto Configuration)

Spring Boot 的核心特性之一是 自动配置,它能够根据类路径中的依赖自动配置 Spring 应用,而不需要手动配置 Bean。例如,如果在类路径中有 spring-boot-starter-web,Spring Boot 会自动配置 Tomcat 作为默认的嵌入式服务器,并且将其配置为处理 HTTP 请求。

经验提示

  • 在大多数情况下,自动配置已经足够。只有在特殊需求下才需要显式配置。
4.2 Spring Boot Starters

Starters 是一组预定义的依赖集,旨在减少开发者手动管理依赖的负担。例如:

  • spring-boot-starter-web:用于构建 RESTful Web 服务。
  • spring-boot-starter-data-jpa:用于构建数据库应用并与 JPA 交互。

经验提示

  • 使用 Starters 可以迅速启动项目,但要定期检查依赖版本,避免潜在的兼容性问题。
4.3 application.properties 配置文件

application.propertiesapplication.yml 是 Spring Boot 的默认配置文件,常用来配置应用属性。常见的配置项包括:

  • 端口配置:
    server.port=8081
    
  • 数据库配置:
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=password
    

经验提示

  • 对于敏感配置(如数据库密码),应考虑使用 Spring Boot 的 配置加密 功能或外部化配置。

5. 构建第一个 REST API

Spring Boot 最常用的一个场景就是构建 Web API。让我们使用 Spring Boot 来创建一个简单的 RESTful API,返回一个 JSON 响应。

创建控制器

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, Spring Boot!";
    }
}

运行项目,然后在浏览器中访问 http://localhost:8080/hello,你将看到 “Hello, Spring Boot!” 的响应。

5.1 RestController 和 RequestMapping 注解
  • @RestController:告诉 Spring 这个类是一个控制器,并且返回的是数据而不是视图。
  • @GetMapping:映射 HTTP GET 请求到指定的处理方法。

经验提示

  • 在构建 REST API 时,充分利用 Spring Boot 的 异常处理数据验证,提升代码的健壮性。

6. 集成数据库

Spring Boot 支持多种数据库集成方式,最常见的是通过 Spring Data JPA 实现数据持久化。

6.1 配置数据库

application.properties 中配置 MySQL 数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
6.2 创建实体类和存储库

实体类

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String name;

    // Getters and Setters
}

存储库

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

控制器

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @GetMapping
    public List<User> getUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
}

经验提示

  • 使用 Spring Data JPA 可以极大简化数据库操作。对于复杂查询,可以定义自定义查询方法或使用 JPQL

7. Spring Boot 的测试支持

Spring Boot 提供了开箱即用的测试支持。你可以通过 @SpringBootTest 进行集成测试。

示例:对 HelloController 进行单元测试:

package com.example.demo;

import com.example.demo.controller.HelloController;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private HelloController helloController;

    @Test
    void contextLoads() {
        assertThat(helloController).isNotNull();
    }
}

8. 经验与最佳实践

  • 分层架构:将应用分为控制器、服务层和数据访问层。控制器仅处理 HTTP 请求,而业务逻辑应放在服务层中。
  • 配置管理:尽量将环境配置外部化,使用 application.properties 或者环境变量管理不同环境的配置。
  • 日志管理:Spring Boot 提供默认的 Logback 日志系统。通过 application.propertiesapplication.yml 配置日志级别、输出位置等。
logging.level.org.springframework=INFO
logging.file.name=spring-boot-app.log
  • 容器化:Spring Boot 应用容易与 Docker 集成。使用 Dockerfile 构建容器化的 Spring Boot 应用,并使用 docker-compose 进行管理。

Spring Boot 简化了 Spring 框架的复杂配置,使得开发者能够快速构建和部署应用。通过 Spring Boot,开发者可以专注于业务逻辑,而无需过多担心基础设施问题。本文介绍了从项目创建、REST API 构建、数据库集成到测试的全流程,希望能帮助你快速掌握 Spring Boot 的基础用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树莓派智能语音助手实现音乐播放

树莓派语音助手从诞生的第一天开始&#xff0c;我就想着让它能像小爱音箱一样&#xff0c;可以语音控制播放音乐。经过这些日子的倒腾&#xff0c;今天终于实现了。 接下里&#xff0c;和大家分享下我的实现方法&#xff1a;首先音乐播放模块用的是我在上一篇博文写的《用sound…

netty编程之基于websocket发送二进制数据

写在前面 本文看下基于websocket发送二进制数据。 1&#xff1a;正文 直接看源码吧&#xff0c;主要如下几个类&#xff1a; WebSocketServerProtocolHandler (内置)&#xff1a;负责websocket握手消息处理 BinaryWebSocketFrameHandler(自定义)&#xff1a;负责处理二进制…

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级&#xff0c;手写实现一个微服务熔断限流器 服务雪崩熔断、限流、降级熔断降级限流 手写实现一个微服务熔断限流器架构设计代码实现整体逻辑ProtectorAspect#aroundMethod(ProceedingJoinPoint)具体实现1、获取接口对…

在 Windows 上运行 Vue 项目时解决 ‘NODE_OPTIONS‘ 错误

在 Windows 上运行 Vue 项目时解决 ‘NODE_OPTIONS’ 错误 在 Windows 系统上启动 Vue 项目时&#xff0c;遭遇报错。具体报错信息如下&#xff1a; ‘NODE_OPTIONS‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。这个错误通常意味着 Windows 系统无法识…

速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读

文章目录 概览LLaMA和LLaMA2的区别AbstractIntroductionPretrainingFine-tuning1. 概括2、Supervised Fine-Tuning&#xff08;SFT&#xff09;3、⭐Reinforcement Learning with Human Feedback&#xff08;RLHF&#xff09;&#x1f53a;总览Training Objectives&#xff1a;…

Redis——redispluspls库——通用命令以及String类型相关接口使用

文章目录 通用命令get&#xff0c;setkeys插入迭代器 expire和ttltype string 类型接口set和getset NX和XXmset 和 mgetgetrange 和 setrangeincr 和 decr 通用命令 get&#xff0c;set void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringV…

回归预测 | Matlab实现INFO-HKELM向量加权算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现INFO-HKELM向量加权算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现INFO-HKELM向量加权算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现INFO-HKELM向量加权算法优化混合核极…

使用Python和Proxy302代理IP高效采集Bing图片

目录 项目背景一、项目准备环境配置 二、爬虫设计与实现爬虫设计思路目标网站分析数据获取流程 代码实现1. 初始化爬虫类&#xff08;BingImageSpider&#xff09;2. 创建存储文件夹3. 获取图像链接4. 下载图片5. 使用Proxy302代理IP6. 主运行函数 运行截图 三、总结 项目背景 …

2024/9/21 leetcode 19题 24题

目录 19.删除链表中的倒数第n个结点 题目描述 题目链接 解题思路与代码 24.两两交换链表中的结点 题目描述 题目链接 解题思路与代码 19.删除链表中的倒数第n个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示…

Kyutai开源实时语音对话模型Moshi

新闻 法国人工智能实验室Kyutai在巴黎举行的一次活动上推出了能够进行自然交互的对话式人工智能助手Moshi&#xff0c;并计划将其作为开源技术发布。Kyutai表示&#xff0c;Moshi是首款可公开访问的人工智能助手&#xff0c;可实现实时对话&#xff0c;有别于OpenAI的GPT-4o&a…

mybatis 和 mybatis-plus

mybatis 配置 1.新建MAVEN项目 2.配置mybatis依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)

本文主要内容:详细介绍了无人机航拍输电线瓷瓶检测的整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 输电线路绝缘瓷瓶的检测主要依赖人工巡检。巡检人员需携带专业设备&#xff0c;攀…

Typora安装和导入导出

Typora安装和导入导出 文章目录 Typora安装和导入导出前言Typora v1.9.5Typora v1.4.7Pandoc 前言 Typora v1.9是最新版, , Typora v1.4是老版本的, 这两个选择一个即可Pandoc可以导入导出word Typora v1.9.5 Typora v1.9.rar, 提取码&#xff1a;tian按ctrl单击鼠标左键打开…

毕业设计选题:基于ssm+vue+uniapp的捷邻小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

大数据实验一: Linux系统安装和使用

一、实验目的 描述Ubuntu的安装过程&#xff1b;使用命令完成Ubuntu中的基础操作&#xff1b; 二、实验平台 操作系统&#xff1a;window系统&#xff1b;内存&#xff1a;4G以上&#xff1b;硬盘&#xff1a;100GB以上&#xff1b;Virtual Box或者VMware&#xff1b;Ubuntu…

如何用1024张显卡训练一个模型

最近看到知乎一个回答&#xff0c;把千卡训练的难度吹上天了。但其实真正用过千卡就会发现也就那么几个点。于是想写一篇文章简单讲讲。 本文将包括几个部分&#xff1a; 首先我们将讨论千卡训练的难题&#xff0c;以及应该在什么时候使用千卡训练&#xff1b; 接着&#xff…

品牌建设是什么?怎么做好品牌建设?

品牌建设&#xff0c;是每个公司品牌形象树立过程中所做的一系列动作&#xff0c;旨在与目标市场建立情感联系&#xff0c;并在竞争激烈的市场中为企业或产品赢得认同和忠诚度。要做好品牌建设&#xff0c;公司首先要明确自己的品牌定位&#xff0c;然后在通过一些品牌建设策略…

Java调用数据库 笔记06 (修改篇)

1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类调用方法进行连接&#xff0c;得到连接对象 DriverManager.getConnection(url, user, password); 其中设置参数&#xff1a; static final String url "jdbc:my…

2024年上海小学生古诗文大会倒计时一个月:做2024官方模拟题

2024年上海市小学生古诗文大会自由参赛的初赛将于10月19日开始&#xff0c;还有不到一个月的时间。 今天好真题继续带着大家来继续做官方2024年小学生古诗文大会的官方模拟题。 【温馨提示】我给每一道题都独家制作了解析&#xff0c;便于孩子理解和熟记题目背后的知识点&…

【python设计模式6】行为型模式1

目录 责任链模式 观察者模式 责任链模式 责任链模式的内容&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。责任链的角色有抽象处理者、…