手记

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

本文提供了全面的Spring Boot项目开发资料,从环境搭建到核心概念讲解,帮助新手快速入门。文章详细介绍了开发实践、项目打包与部署以及日常问题排查与调试技巧。此外,还推荐了丰富的学习资源和源码阅读建议,帮助开发者深入理解Spring Boot项目开发。

Spring Boot项目开发资料:新手入门教程
Spring Boot简介与环境搭建

Spring Boot是什么

Spring Boot旨在简化新Spring应用的初始搭建以及配置过程。它通过约定优于配置的方式,帮助开发者快速建立项目,减少配置文件的编写。Spring Boot内置了大量常用的配置,使得开发者可以专注于业务逻辑的编写,而不是配置的细节。

开发环境搭建

开始使用Spring Boot之前,首先需要搭建开发环境。你需要安装以下工具:

  • Java开发工具包(JDK)
  • Spring Boot Starter Parent依赖
  • Apache Maven或Gradle构建工具

安装JDK与配置环境变量

  1. 安装JDK。下载并安装最新版本的JDK,确保安装成功后,环境变量已正确设置。
  2. 检查环境变量配置。在命令行中输入java -version,输出版本信息表示环境变量配置正确。
  3. 强制环境变量设置。如果需要指定环境变量路径,可添加至系统环境变量中。
# 设置JAVA_HOME环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

安装Maven或Gradle

  1. 下载并安装Maven。官方下载地址为http://maven.apache.org/download.cgi
  2. 配置Maven。修改settings.xml文件,配置仓库地址、镜像源等。
<!-- 在settings.xml中配置仓库地址 -->
<settings>
  <mirrors>
    <mirror>
      <id>central</id>
      <url>http://repo1.maven.org/maven2</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
</settings>

下载Spring Boot Starter Parent依赖

pom.xml文件中添加Spring Boot Starter Parent依赖。

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.4.1</version>
</parent>

快速创建第一个Spring Boot应用

使用Spring Initializr创建项目。首先,打开浏览器访问https://start.spring.io/。选择项目类型为Maven或Gradle,然后选择语言与版本,最后填写项目的基本信息。

# 使用Maven命令行快速创建项目
mvn archetype:generate -DgroupId=com.example -DartifactId=spring-boot-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

创建完成后,进入项目目录并执行Spring Boot的启动类。

package com.example.springBootApp;

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

@SpringBootApplication
public class SpringBootAppApplication {

  public static void main(String[] args) {
    SpringApplication.run(SpringBootAppApplication.class, args);
  }
}
Spring Boot核心概念讲解

自动配置原理

Spring Boot使用约定优于配置的模式,自动配置应用中的组件。例如,启动项目时,Spring Boot会根据类路径中的依赖进行自动配置。自动配置的功能性由@SpringBootApplication注解实现,此注解集成了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个注解。

@EnableAutoConfiguration注解中,Spring Boot会扫描并自动配置特定的依赖。例如,当项目中包含spring-boot-starter-web依赖时,Spring Boot会自动配置一个Tomcat服务器和相关的配置。

Starter依赖管理

Spring Boot使用“Starter”依赖来简化依赖管理。一个Starter依赖可以包含多个库和它们的版本,减少手动管理版本的复杂度。例如,spring-boot-starter-web包含了Spring MVC和Tomcat服务器的依赖。

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

配置文件详解(application.properties和application.yml)

Spring Boot支持两种配置文件格式:application.propertiesapplication.yml

application.properties

# 端口号
server.port=8080

# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 日志配置
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG

application.yml

server:
  port: 8080

spring:
  datasource:
  url: jdbc:mysql://localhost:3306/testdb
  username: root
  password: root
  driver-class-name: com.mysql.cj.jdbc.Driver

logging:
  level:
    root: INFO
    org.springframework.web: DEBUG
常见开发实践

创建RESTful API

使用Spring Boot创建RESTful API非常简单。通过使用@RestController注解和@RequestMapping注解,可以轻松创建控制器。

package com.example.springBootApp;

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

@RestController
public class HelloWorldController {

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

数据库集成与ORM框架使用(JPA/MyBatis)

使用JPA

  1. 添加JPA依赖。
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  1. 定义实体类。
package com.example.springBootApp.entity;

import javax.persistence.*;

@Entity
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String name;
  private String email;

  // getters and setters
}
  1. 创建仓库类。
package com.example.springBootApp.repository;

import com.example.springBootApp.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}
  1. 创建服务类。
package com.example.springBootApp.service;

import com.example.springBootApp.entity.User;
import com.example.springBootApp.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

  @Autowired
  private UserRepository userRepository;

  public User save(User user) {
    return userRepository.save(user);
  }
}
  1. 创建控制器。
package com.example.springBootApp;

import com.example.springBootApp.entity.User;
import com.example.springBootApp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {

  @Autowired
  private UserService userService;

  @PostMapping("/users")
  public User createUser(@RequestBody User user) {
    return userService.save(user);
  }
}

使用MyBatis

  1. 添加MyBatis依赖。
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.1.4</version>
</dependency>
  1. 定义实体类。
package com.example.springBootApp.entity;

public class User {
  private Long id;
  private String name;
  private String email;

  // getters and setters
}
  1. 创建映射接口。
package com.example.springBootApp.mapper;

import com.example.springBootApp.entity.User;
import org.apache.ibatis.annotations.*;

public interface UserMapper {
  @Insert("INSERT INTO user (name, email) VALUES (#{name}, #{email})")
  void insertUser(User user);

  @Select("SELECT * FROM user WHERE id = #{id}")
  User getUserById(Long id);
}
  1. 创建服务类。
package com.example.springBootApp.service;

import com.example.springBootApp.entity.User;
import com.example.springBootApp.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

  @Autowired
  private UserMapper userMapper;

  public void saveUser(User user) {
    userMapper.insertUser(user);
  }
}
  1. 创建控制器。
package com.example.springBootApp;

import com.example.springBootApp.entity.User;
import com.example.springBootApp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {

  @Autowired
  private UserService userService;

  @PostMapping("/users")
  public void createUser(@RequestBody User user) {
    userService.saveUser(user);
  }
}

日志管理

Spring Boot默认使用Logback作为日志框架,并使用logging.level属性来设置日志级别。可以在application.propertiesapplication.yml文件中配置日志级别。

# application.properties
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
# application.yml
logging:
  level:
    root: INFO
    org.springframework.web: DEBUG
项目打包与部署

使用Maven/Gradle打包项目

使用Maven或Gradle打包Spring Boot项目,可以使用相应的命令:

  • 使用Maven打包:
mvn clean package
  • 使用Gradle打包:
./gradlew build

项目部署到Tomcat或Spring Boot内置容器

部署到Tomcat

将打包好的JAR文件放置到Tomcat的webapps目录下,启动Tomcat即可。

部署到Spring Boot内置容器

Spring Boot内置了Tomcat服务器,可以直接运行JAR文件。

java -jar target/spring-boot-app-0.0.1-SNAPSHOT.jar
日常问题排查与调试技巧

常见错误与解决方法

  • 错误:依赖找不到
    • 检查pom.xmlbuild.gradle文件中的依赖是否正确配置。
  • 错误:无法启动Tomcat
    • 检查端口是否被占用,或者修改application.properties中的端口号。
  • 错误:数据库连接失败
    • 确保数据库服务已经启动,并检查数据库连接配置是否正确。

日志查看与调试

使用IDE中的断点调试功能,可以在代码执行到断点时暂停,检查变量值。还可以通过logging.level属性设置日志级别,便于查找问题。

单元测试与集成测试

单元测试

Spring Boot使用JUnit作为单元测试框架。在src/test/java目录下创建测试类。

package com.example.springBootApp;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class UserServiceTest {

  @Autowired
  private UserService userService;

  @Test
  public void testSaveUser() {
    User user = new User();
    user.setName("Test User");
    user.setEmail("testuser@example.com");
    User savedUser = userService.save(user);
    assert savedUser.getName().equals("Test User");
  }
}

集成测试

集成测试包含多个组件的协作测试。在测试类中使用@SpringBootTest注解,模拟运行整个应用。

@SpringBootTest
public class UserControllerTest {

  @Autowired
  private TestRestTemplate restTemplate;

  @Test
  public void testCreateUser() {
    User user = new User();
    user.setName("Test User");
    user.setEmail("testuser@example.com");
    User savedUser = restTemplate.postForEntity("/users", user, User.class).getBody();
    assert savedUser.getName().equals("Test User");
  }
}
源码阅读与进阶学习

推荐学习资源

源码阅读建议

  • @SpringBootApplication注解开始,了解自动配置的原理。
  • 学习spring-boot-autoconfigure模块,了解如何编写自动配置类。
  • 阅读spring-boot-starter-parent依赖管理代码,了解如何简化依赖管理。

通过阅读源码和参考文档,可以更深入地理解Spring Boot的工作原理,更好地利用其特性进行开发。

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