手记

Springboot项目开发资料:新手入门教程

概述

本文提供了关于Spring Boot项目开发的全面指南,涵盖环境搭建、核心概念讲解、常用功能开发以及部署和调试方法。通过详细的示例代码和配置说明,帮助开发者快速掌握Spring Boot项目开发。

Spring Boot简介

什么是Spring Boot

Spring Boot是由Pivotal团队提供的框架,其目的是简化Spring应用的搭建和开发过程。Spring Boot基于Spring框架提供了一系列开箱即用的自动配置功能,使得开发者可以快速地搭建起一个运行中的应用。它通过约定优于配置的原则,大大减少了配置的工作量,使开发者能够专注于业务逻辑的实现。

Spring Boot的优点

  1. 快速集成:Spring Boot自带的Starter依赖可以快速集成常用的库,简化开发。
  2. 自动配置:通过约定优于配置的原则,Spring Boot会自动完成许多配置,降低配置复杂度。
  3. 无依赖配置:Spring Boot应用通常不需要额外的配置文件,可以快速上手。
  4. 内置运行器:Spring Boot应用可以在IDE中直接运行,也可以打包成独立的可执行jar文件运行。
  5. 健康指标和监控:提供了Actuator模块,方便监控应用状态。
  6. 无需容器:可以独立运行,无需Tomcat、Jetty等容器。

Spring Boot的适用场景

  1. 微服务架构:Spring Boot非常适合构建微服务架构的后端应用。
  2. 快速原型:对于需要快速进行应用原型验证的场合,Spring Boot提供了一套完整的基础设施。
  3. 企业应用:企业级应用开发,特别是需要集成数据库、缓存、消息等中间件时。
  4. RESTful服务:构建RESTful API服务。
  5. 数据分析:结合Spring Boot的数据处理模块,进行数据存储和分析。
  6. 云原生应用:与Spring Cloud等框架结合,构建云原生应用。
Spring Boot环境搭建

开发环境配置

  1. 安装JDK:确保已安装JDK 8或更高版本,JDK是开发Spring Boot应用的基础。
  2. 安装IDE:使用IntelliJ IDEA、Eclipse等IDE。
  3. 安装Maven或Gradle:基于Maven或Gradle进行项目依赖管理。
  4. 安装Spring Boot工具插件:在IDE中安装Spring Boot相关插件,如Spring Boot Support插件。

创建第一个Spring Boot项目

创建一个简单的Spring Boot项目,可以通过Spring Initializr(https://start.spring.io/)生成新的项目结构

<?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: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.7.4</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

创建一个简单的控制器类DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class DemoApplication {

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

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

Maven/Gradle依赖管理

Maven依赖管理

pom.xml文件中,可以添加各种依赖,如Web、JPA、MyBatis等。

<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.apache.mybatis</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
</dependencies>

Gradle依赖管理

build.gradle文件中,可以添加各种依赖,如Web、JPA、MyBatis等。

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.apache.ibatis:mybatis-spring-boot-starter:2.1.4'
}
Spring Boot核心概念讲解

自动配置

自动配置是Spring Boot的核心特性之一。Spring Boot通过一些配置类实现了默认的自动配置过程。例如,当添加spring-boot-starter-web依赖时,Spring Boot会自动配置一个内嵌的Tomcat服务器,并启用Spring MVC和Spring WebFlux等子模块。

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);
    }
}

Starter依赖

Starter依赖是Spring Boot提供的预定义依赖集合,通过引入这些依赖,可以快速集成常用的库。例如,spring-boot-starter-web依赖包含了Spring MVC和内嵌的Servlet容器。

@SpringBootApplication注解详解

@SpringBootApplication是一个组合注解,它等价于@Configuration@EnableAutoConfiguration@ComponentScan三个注解的组合。

  1. @Configuration:标记类作为配置类。
  2. @EnableAutoConfiguration:启用自动配置。
  3. @ComponentScan:扫描组件,找到并注册成Spring Beans。
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);
    }
}

Spring Boot的运行模式

Spring Boot应用可以通过命令行运行,也可以通过IDE运行。

  • 命令行运行:使用java -jar命令运行打包后的jar文件。
  • IDE运行:在IDE中直接运行DemoApplication类的main方法。
  • IDEA中的Spring Boot运行配置:可以通过IDEA的Spring Boot插件进行配置,使项目能够直接运行。
Spring Boot常用功能开发

RESTful服务开发

Spring Boot提供了@RestController注解来简化RESTful服务的开发。@RestController注解将控制器标记为响应式控制器,并自动将所有返回值映射为JSON。

package com.example.demo;

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

数据库集成(JPA, MyBatis)

JPA集成

  1. 配置数据库连接信息。
  2. 创建实体类和对应的Repository接口。
  3. 使用@Repository注解声明数据访问层。
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;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

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

MyBatis集成

  1. 配置MyBatis的XML映射文件。
  2. 创建接口,并使用@Mapper注解。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.demo.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(Long id);
}

配置文件使用(application.properties/application.yml)

配置文件可以用来配置各种应用属性,如数据库连接、端口、日志级别等。

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
server.port=8080

application.yml

spring:
  datasource:
   url: jdbc:mysql://localhost:3306/demo
   username: root
   password: root
   driver-class-name: com.mysql.jdbc.Driver
server:
   port: 8080

日志管理

Spring Boot支持各种日志框架,如SLF4J、Logback等。默认使用Logback作为日志框架。

application.properties

spring:
  logging:
   level:
      root: INFO
      com.example: DEBUG

application.yml

spring:
 logging:
   level:
      root: INFO
      com.example: DEBUG
Spring Boot项目部署与运行

打包Spring Boot应用

可以使用Maven或Gradle打包Spring Boot应用。

Maven打包

mvn clean package

Gradle打包

gradle build

部署到Tomcat、Jetty、Undertow等容器

将打包好的jar文件放入容器中运行。

运行在Tomcat

java -jar target/demo-0.0.1-SNAPSHOT.jar

运行在Jetty

java -jar -Dspring.main.webApplicationType=undertow target/demo-0.0.1-SNAPSHOT.jar

运行在Undertow

java -jar -Dspring.main.webApplicationType=jetty target/demo-0.0.1-SNAPSHOT.jar

使用Docker部署Spring Boot应用

将Spring Boot应用打包成Docker镜像并运行。

Dockerfile

FROM openjdk:8-jre-slim
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

构建并运行Docker镜像

docker build -t springboot-demo .
docker run -p 8080:8080 springboot-demo
Spring Boot调试与测试

单元测试编写(JUnit)

编写单元测试,验证单个组件的功能。

测试控制器

package com.example.demo;

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
public class HelloControllerTest {
    @Autowired
    private MockMvc mockMvc;

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

集成测试编写

集成测试验证多个组件之间的交互。

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
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.status;

@SpringBootTest
public class IntegrationTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void shouldReturnDefaultMessage() throws Exception {
        mockMvc.perform(get("/hello"))
               .andExpect(status().isOk());
    }
}

使用IDE进行调试

使用IDE进行调试时,可以在DemoApplication.java类的main方法中设置断点,运行应用并进行调试。

IntelliJ IDEA调试步骤

  1. 在main方法中设置断点。
  2. 在IDE中运行DemoApplication.java类。
  3. 使用IDE的调试工具进行变量查看和流程跟踪。

Eclipse调试步骤

  1. 在main方法中设置断点。
  2. 在Eclipse中运行DemoApplication.java类。
  3. 使用Eclipse的Debug视图进行调试。

通过上述步骤和代码示例,可以学习如何搭建开发环境、创建Spring Boot项目、理解核心概念以及开发常用功能、部署和调试。希望这些内容能帮助读者快速上手并深入理解Spring Boot框架。

0人推荐
随时随地看视频
慕课网APP