继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Springboot入门:轻松搭建你的第一个Spring Boot应用

噜噜哒
关注TA
已关注
手记 241
粉丝 8
获赞 25
概述

Spring Boot入门教程介绍了如何快速搭建和开发Spring Boot应用,涵盖了从项目创建到运行测试的全过程。文章详细讲解了Spring Boot的自动配置、嵌入式服务器支持以及快速集成第三方库等功能。通过示例代码和配置文件,读者可以轻松上手并理解Spring Boot的基本使用方法。

Spring Boot简介

Spring Boot 是一个基于 Spring 框架的开源微框架,旨在简化新 Spring 应用的初始搭建以及开发过程。Spring Boot 通过提供一套默认配置,帮助开发者快速搭建起步项目,并且可以自动配置大部分默认设置,使得开发过程更加便捷。

什么是Spring Boot

Spring Boot 是由 Pivotal 团队提供的一个框架,其设计目的是简化新 Spring 应用的初始搭建以及开发过程。通过使用 Spring Boot,你可以用更少的配置来创建独立的、生产级别的基于 Spring 的应用。Spring Boot 也支持使用嵌入式的 Web 服务器,如 Jetty 和 Tomcat,使得开发和部署变得更加简单。

Spring Boot的优势

Spring Boot 通过以下优势来简化开发过程:

  1. 自动配置:Spring Boot 通过约定优于配置的方式,自动配置了许多常见的场景,如数据库连接、缓存、邮件发送等,从而减少了开发人员的配置工作量。
  2. 无需 XML 配置:Spring Boot 采用 Java 配置,不需要繁琐的 XML 配置文件。
  3. 响应式开发:支持响应式编程风格,使用 Spring WebFlux 进行响应式 Web 应用开发。
  4. 嵌入式服务器:Spring Boot 可以内嵌 Tomcat、Jetty、Undertow 服务器,可以立即执行和部署。
  5. 独立运行:可以打包为可独立运行的应用,无需部署到 WAR 文件,可以直接运行。
  6. 开箱即用:提供了一系列可开箱即用的功能,如健康检查、监控、安全等。
  7. 快速集成:支持快速集成各种第三方库,如 MyBatis、JPA、Redis、RabbitMQ、WebSocket 等。

Spring Boot的适用场景

Spring Boot 适用于希望快速搭建应用、减少配置、专注于业务逻辑开发的场景。例如:

  1. 快速原型开发:当需要快速搭建应用原型进行演示或测试时,Spring Boot 提供了简便的开发模式。
  2. 微服务开发:对于构建微服务架构的应用,Spring Boot 提供了良好的支持。
  3. 单体应用:对于传统的单体应用,Spring Boot 也能够简化配置,提高开发效率。
  4. Rapid Application Development (RAD):适用于快速应用程序开发场景,减少时间成本。
  5. 企业级应用:企业级应用开发过程中,利用 Spring Boot 可以快速搭建开发环境,提高开发效率。
快速搭建Spring Boot项目

使用Spring Initializr创建项目

Spring Initializr 是一个在线工具,用于快速生成 Spring Boot 项目的骨架。它提供了多种语言和依赖选择,可以生成 Maven 或 Gradle 项目结构。

要使用 Spring Initializr 创建一个新的 Spring Boot 项目,请按照以下步骤操作:

  1. 访问 Spring Initializr 网站:https://start.spring.io/
  2. 选择项目的基本信息(例如项目名称、语言、依赖版本等)。
  3. 添加所需的依赖(例如 Web、Thymeleaf、JPA 等)。
  4. 点击“Generate”按钮,生成项目代码。
  5. 下载生成的压缩包,解压后导入到 IDE 中(例如 IntelliJ IDEA 或 Eclipse)。

示例:假设我们创建一个简单的 Web 项目,选择 Maven 作为构建工具,引入 web 和 Thymeleaf 依赖,生成的目录结构如下:

my-spring-boot-app/
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
    ├── main
        ├── java
        │   └── com
        │       └── example
        │           └── myapp
        │               ├── Application.java
        │               └── controller
        │                   └── HelloController.java
        └── resources
            ├── application.properties
            └── static
                └── css
                    └── styles.css

项目结构解析

  • my-spring-boot-app:项目根目录
  • mvnwmvnw.cmd:Maven 的可执行文件,用于简化构建命令。
  • pom.xml:Maven 的配置文件,包含项目的依赖信息。
  • src/main/java:Java 源代码目录。
    • com.example.myapp.Application.java:项目的主入口类。
    • com.example.myapp.controller.HelloController.java:一个简单的控制器类。
  • src/main/resources:项目资源文件目录。
    • application.properties:应用配置文件。
    • static:存放静态资源文件,如 css、js、html 等。
    • templates:存放 Thymeleaf 模板文件。
    • application.yml:可选的 YAML 格式的配置文件。

配置文件介绍

Spring Boot 使用 application.propertiesapplication.yml 文件来保存配置信息。

示例配置文件 application.properties

# 端口号
server.port=8080

# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root

# 静态资源路径
spring.resources.static-locations=classpath:/static/,classpath:/public/

# 日志配置
logging.level.root=INFO
logging.level.com.example.myapp=DEBUG

# 其他配置
spring.messages.basename=i18n/messages
第一个Spring Boot应用实例

创建Controller和Service

创建一个简单的 REST 控制器 (HelloController.java) 和一个服务 (HelloService.java)。

HelloController.java

package com.example.myapp.controller;

import com.example.myapp.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @Autowired
    private HelloService helloService;

    @GetMapping("/hello")
    public String hello() {
        return helloService.sayHello();
    }
}

HelloService.java

package com.example.myapp.service;

import org.springframework.stereotype.Service;

@Service
public class HelloService {

    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

运行并测试应用

  1. 运行应用:启动 Spring Boot 应用,可以在 IDE 中直接运行 Application 类的 main 方法,或者使用 Maven 命令 mvn spring-boot:run 运行。

  2. 测试应用:打开浏览器,访问 http://localhost:8080/hello/hello,应看到输出 Hello, Spring Boot!

Application.java

package com.example.myapp;

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

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

日志和错误处理

日志配置

Spring Boot 的日志默认使用 Logback,可以通过修改 application.properties 中的配置来调整日志级别。

logging.level.root=INFO
logging.level.com.example.myapp=DEBUG

错误处理

Spring Boot 提供了全局异常处理机制,可以通过创建一个全局异常处理器来捕获并处理异常。

package com.example.myapp.exception;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
Spring Boot常用注解和配置

@SpringBootApplication注解

@SpringBootApplication 是一个组合注解,它包含了以下三个注解:

  1. @Configuration:标记该类是一个配置类。
  2. @EnableAutoConfiguration:启用自动配置。
  3. @ComponentScan:启用组件扫描。

示例:

package com.example.myapp;

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

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

@Configuration注解

@Configuration 注解用于标记一个类作为配置类,可以包含若干 @Bean 方法,用于声明和配置 Spring 应用中的组件。

示例:

package com.example.myapp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public HelloWorldService helloWorldService() {
        return new HelloWorldService();
    }
}

配置文件中的常用属性

Spring Boot 支持使用 application.propertiesapplication.yml 文件来配置应用的各种属性。

application.properties

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

# 服务端口号
server.port=8080

# 其他配置
logging.level.root=INFO

application.yml

server:
  port: 8080

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

logging:
  level:
    root: INFO
数据库集成

添加数据库驱动依赖

pom.xml 中添加数据库驱动依赖,例如 MySQL 的依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

创建数据库连接

application.properties 中配置数据库连接信息。

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

实现简单的CRUD操作

创建一个简单的实体类 (User.java) 和对应的仓库接口 (UserRepository.java)。

User.java

package com.example.myapp.model;

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;

    // getters and setters
}

UserRepository.java

package com.example.myapp.repository;

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

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

创建一个服务类来实现 CRUD 操作 (UserService.java)。

UserService.java

package com.example.myapp.service;

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

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

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

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public void deleteUserById(Long id) {
        userRepository.deleteById(id);
    }
}

创建一个控制器来暴露 REST 接口 (UserController.java)。

UserController.java

package com.example.myapp.controller;

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

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

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

    @GetMapping("/all")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @DeleteMapping("/{id}")
    public void deleteUserById(@PathVariable Long id) {
        userService.deleteUserById(id);
    }
}
Spring Boot的扩展和优化

使用Thymeleaf模板引擎

Thymeleaf 是一个 Java 模板引擎,用于生成 XML、HTML 和纯文本内容。Spring Boot 中可以使用 Thymeleaf 作为视图解析器。

  1. 添加依赖:在 pom.xml 中添加 Thymeleaf 依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 创建模板文件:在 src/main/resources/templates 目录下创建一个 HTML 模板文件 index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Thymeleaf Example</title>
</head>
<body>
    <h1 th:text="'Hello, ' + ${name} + '!'"></h1>
</body>
</html>
  1. 创建控制器:创建一个控制器来渲染模板。
package com.example.myapp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ThymeleafController {

    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("name", "Spring Boot User");
        return "index";
    }
}

静态资源管理和自定义错误页面

静态资源管理

Spring Boot 会自动解析 src/main/resources/static 目录下的静态资源文件,例如 CSS、JavaScript 和图片等。

自定义错误页面

可以在 src/main/resources/templates 目录下创建 error.html 文件来定义自定义错误页面。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Error Page</title>
</head>
<body>
    <h1>Oops, something went wrong!</h1>
    <p th:text="'Error Code: ' + ${status}"></p>
    <p th:text="'Error Message: ' + ${message}"></p>
</body>
</html>

在控制器中返回错误代码。

package com.example.myapp.controller;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ErrorController {

    @GetMapping("/error")
    public ResponseEntity<String> error() {
        return new ResponseEntity<>("Oops, something went wrong!", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

使用Spring Boot Actuator监控应用

Spring Boot Actuator 提供了一系列管理和监控应用的端点,可以查看应用的运行状态、健康检查、环境信息等。

  1. 添加依赖:在 pom.xml 中添加 Actuator 依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 访问 Actuator 端点:默认情况下,Actuator 端点位于 /actuator 下,可以通过访问 http://localhost:8080/actuator 来查看可用的端点。

  2. 常用端点

    • health:显示应用的健康状态。
    • info:显示应用的环境信息。
    • metrics:显示应用的度量信息。
    • env:显示应用的环境变量。
  3. 自定义Actuator端点:可以通过 application.propertiesapplication.yml 文件来配置 Actuator 的行为。
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always

这些配置项可以让 healthinfo 端点暴露在 Web 端点,并且显示详细的健康信息。

  1. 远程监控:可以通过配置 Spring Boot Admin 或其他监控工具来远程监控 Spring Boot 应用的状态。

通过这些配置和改造,可以大大增强应用的可管理性和可观测性。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP