Spring Boot入门指南

1. 什么是Spring Boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

1.1 Spring Boot的核心特性

  • 自动配置:根据类路径中的jar包、类,为jar包里的类自动配置Bean
  • 起步依赖:将具备某种功能的坐标打包到一起,提供一些默认的功能
  • 内嵌服务器:无需部署到外部容器,可直接运行
  • 生产就绪:提供生产级别的监控、健康检查等功能

1.2 Spring Boot的优势

  1. 简化配置:减少XML配置,采用注解和Java配置
  2. 快速开发:提供starter依赖,快速集成各种技术
  3. 微服务友好:天然支持微服务架构
  4. 云原生:支持Docker、Kubernetes等云原生技术

2. 环境准备

2.1 开发环境要求

  • JDK 8+:推荐使用JDK 11或JDK 17
  • Maven 3.6+Gradle 6+
  • IDE:IntelliJ IDEA、Eclipse、VS Code等

2.2 创建第一个Spring Boot项目

方法一:使用Spring Initializr
  1. 访问 https://start.spring.io/

  2. 选择项目元数据:

    • Project: Maven
    • Language: Java
    • Spring Boot: 3.2.0
    • Group: com.example
    • Artifact: demo
    • Name: demo
    • Package name: com.example.demo
    • Packaging: Jar
    • Java: 17
  3. 添加依赖:

    • Spring Web
    • Spring Boot DevTools
方法二:使用IDE创建

在IntelliJ IDEA中:

  1. File → New → Project
  2. 选择Spring Initializr
  3. 配置项目信息
  4. 选择依赖

3. 项目结构解析

src/
├── main/
│   ├── java/
│   │   └── com/example/demo/
│   │       └── DemoApplication.java
│   └── resources/
│       ├── application.properties
│       └── static/
│       └── templates/
└── test/
    └── java/
        └── com/example/demo/
            └── DemoApplicationTests.java

3.1 核心文件说明

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

application.properties - 配置文件

# 服务器配置
server.port=8080
server.servlet.context-path=/demo

# 应用配置
spring.application.name=demo
spring.profiles.active=dev

# 日志配置
logging.level.com.example.demo=DEBUG

4. 第一个REST API

4.1 创建控制器

package com.example.demo.controller;

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

@RestController
public class HelloController {
    
    @GetMapping("/hello")
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
        return String.format("Hello %s!", name);
    }
    
    @GetMapping("/")
    public String home() {
        return "Welcome to Spring Boot!";
    }
}

4.2 运行应用

  1. 在IDE中右键运行DemoApplication
  2. 或使用Maven命令:mvn spring-boot:run
  3. 访问 http://localhost:8080/hello

5. 配置文件详解

5.1 application.properties

# 服务器配置
server.port=8080
server.servlet.context-path=/api
server.servlet.session.timeout=30m

# 数据库配置
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# JPA配置
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# 日志配置
logging.level.org.springframework.web=DEBUG
logging.level.com.example.demo=INFO
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

5.2 application.yml

server:
  port: 8080
  servlet:
    context-path: /api
    session:
      timeout: 30m

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password: 
  
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
    properties:
      hibernate:
        format_sql: true

logging:
  level:
    org.springframework.web: DEBUG
    com.example.demo: INFO
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

6. 开发工具

6.1 Spring Boot DevTools

DevTools提供以下功能:

  • 自动重启:代码变更时自动重启应用
  • LiveReload:浏览器自动刷新
  • 属性默认值:开发环境优化配置
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

6.2 热部署配置

# 关闭热部署
spring.devtools.restart.enabled=false

# 排除不需要重启的资源
spring.devtools.restart.exclude=static/**,public/**

# 监听额外路径
spring.devtools.restart.additional-paths=src/main/java

7. 测试

7.1 单元测试

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

@SpringBootTest
@TestPropertySource(properties = {
    "spring.datasource.url=jdbc:h2:mem:testdb"
})
class DemoApplicationTests {

    @Test
    void contextLoads() {
        // 测试Spring上下文加载
    }
}

7.2 集成测试

package com.example.demo.controller;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc;
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.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureWebMvc
class HelloControllerTest {

    @Autowired
    private MockMvc mockMvc;

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

8. 打包和部署

8.1 打包应用

# Maven打包
mvn clean package

# 运行jar包
java -jar target/demo-0.0.1-SNAPSHOT.jar

# 指定配置文件
java -jar target/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

8.2 Docker部署

Dockerfile

FROM openjdk:17-jdk-slim

WORKDIR /app

COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

构建和运行

# 构建镜像
docker build -t demo-app .

# 运行容器
docker run -p 8080:8080 demo-app

9. 常见问题解决

9.1 端口占用问题

# 查看端口占用
netstat -ano | findstr :8080

# 杀死进程
taskkill /PID <进程ID> /F

9.2 内存不足

# 设置JVM参数
java -Xms512m -Xmx1024m -jar app.jar

9.3 配置文件不生效

检查配置文件位置和格式:

  • 配置文件必须在classpath根目录
  • YAML格式注意缩进
  • Properties文件注意编码

10. 最佳实践

10.1 项目结构规范

src/main/java/com/example/demo/
├── config/          # 配置类
├── controller/       # 控制器
├── service/          # 服务层
├── repository/       # 数据访问层
├── entity/           # 实体类
├── dto/              # 数据传输对象
├── util/             # 工具类
└── DemoApplication.java

10.2 代码规范

  1. 包命名:使用小写字母,多个单词用点分隔
  2. 类命名:使用大驼峰命名法
  3. 方法命名:使用小驼峰命名法
  4. 常量命名:全大写,下划线分隔

10.3 配置管理

  1. 环境分离:dev、test、prod环境配置分离
  2. 敏感信息:使用环境变量或配置中心
  3. 配置验证:使用@ConfigurationProperties验证配置

11. 总结

Spring Boot通过自动配置和起步依赖,大大简化了Spring应用的开发。本文介绍了:

  1. 基础概念:Spring Boot的核心特性和优势
  2. 项目创建:多种方式创建Spring Boot项目
  3. 项目结构:标准的项目目录结构
  4. REST API:创建第一个Web接口
  5. 配置文件:properties和yml配置方式
  6. 开发工具:DevTools的使用
  7. 测试:单元测试和集成测试
  8. 部署:打包和Docker部署
  9. 问题解决:常见问题的解决方案
  10. 最佳实践:开发规范和配置管理

通过本教程,小伙伴们已经掌握了Spring Boot的基础知识,可以开始构建自己的Spring Boot应用了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小凯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值