为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
SpringBoot
概述

Spring Boot 是一个简化了 Spring 应用开发的框架,它通过自动配置和约定优于配置的方式,帮助开发者快速搭建独立运行的应用程序。本文将详细介绍 Spring Boot 的核心概念、环境搭建、常用注解使用、技术整合以及常见问题的解决方法,帮助你更好地掌握 Spring Boot 项目开发。Spring Boot 项目开发资料涵盖了从环境搭建到实际应用的全面内容,旨在为开发者提供详尽的指导。

Spring Boot 简介
什么是Spring Boot

Spring Boot 是由 Pivotal 团队开发的用于简化新 Spring 应用初始搭建以及开发过程的框架。它通过约定优于配置的方式,帮助开发者迅速搭建起一个独立运行的 Spring 应用程序。Spring Boot 能够自动配置 Spring 应用,使得开发者无需编写大量的配置代码,只需要少量的代码甚至无需代码即可快速搭建起一个 Web 应用,从而提高了开发效率。

Spring Boot 框架的核心在于能够快速启动一个 Spring 应用程序,它能够自动配置 Spring 应用环境,提供了一系列的默认配置,使开发人员可以更快地构建出一个可运行的应用程序。 Spring Boot 也支持嵌入式的 Web 服务器(如 Tomcat、Jetty 和 Undertow),提供了一种无需部署到外部服务器、直接运行于 JVM 上的方式,进一步简化了开发和部署过程。

Spring Boot 的优势
  1. 简化开发流程:Spring Boot 通过约定优于配置的理念,大大减少了配置文件的数量,使得应用程序的开发变得更加简单。
  2. 自动配置:Spring Boot 能够根据项目需求自动配置 Spring 应用环境,减少了手动配置的工作。
  3. 支持嵌入式 Web 服务器:Spring Boot 可以内嵌 Tomcat、Jetty、Undertow 等 Web 服务器,提供了无需部署到外部服务器的开发方式。
  4. 依赖管理:Spring Boot 提供了对依赖的管理,开发者只需引入 Spring Boot 的启动器,即可自动引入所有相关的依赖。
  5. 快速启动:Spring Boot 使得应用程序可以快速启动并运行。
  6. 健康检查:Spring Boot 提供了健康检查功能,方便开发者监控应用的运行状态。
Spring Boot 的核心概念
  1. 自动配置:Spring Boot 的自动配置功能使得框架能够根据类路径中的 jar 文件自动配置 Spring 应用环境。例如,如果项目中包含了 spring-boot-starter-web 依赖,Spring Boot 将自动配置好 Spring MVC。

  2. Starter 依赖:Spring Boot 提供了一系列的 starter 依赖,如 spring-boot-starter-webspring-boot-starter-data-jpa 等,开发者只需引入这些依赖,Spring Boot 就会自动配置相关的 Spring 模块。

  3. Spring Boot 应用程序入口:Spring Boot 应用程序通常有一个明确的入口类,使用 @SpringBootApplication 注解,这个注解集成了 @Configuration@EnableAutoConfiguration@ComponentScan,在主方法中调用 SpringApplication.run() 方法启动应用。

  4. 配置属性:Spring Boot 支持通过 application.propertiesapplication.yml 文件配置属性,也可以使用 @Value@ConfigurationProperties 注解注入配置属性。

  5. Actuator:Spring Boot Actuator 提供了一系列的生产就绪特性,如健康检查、指标收集、审计事件、HTTP 跟踪等。
环境搭建
开发环境配置

开发 Spring Boot 应用需要安装以下环境:

  1. JDK:需要安装 JDK 8 或更高版本。可以在 Oracle 官方网站下载。
  2. IDE:推荐使用 IntelliJ IDEA 或 Eclipse。可以从官网下载。
  3. Maven:Spring Boot 项目使用 Maven 或 Gradle 进行构建。可以去 Maven 官网下载。
  4. Spring Boot CLI:可选,但可以使用 Spring Boot CLI 命令直接运行 Spring Boot 应用,而不需要调用 mvn 或 gradle。

安装完成后,可以通过命令行验证安装是否成功:

  • JDK:java -version
  • Maven:mvn -version

以下是安装 JDK 的示例步骤:

  1. 下载 JDK 安装包,解压到指定目录。
  2. 设置环境变量 JAVA_HOME 指向解压后的目录。
  3. 设置环境变量 PATH 包含 %JAVA_HOME%\bin
创建Spring Boot项目

创建 Spring Boot 项目有多种方式,本节介绍使用 IntelliJ IDEA 创建 Spring Boot 项目的方法。

  1. 打开 IntelliJ IDEA,选择 File -> New -> Project
  2. 在弹出的窗口中选择 Spring Initializr,点击 Next
  3. 输入 GroupArtifact 信息,选择 Java 语言和 Maven 作为构建工具。
  4. Dependencies 中选择 Spring Web 依赖。
  5. 点击 Next,选择项目保存的位置,点击 Finish

示例代码

创建一个简单的 Spring Boot 应用程序如下:

<!-- pom.xml 配置文件 -->
<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>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</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>
快速上手Hello World

接下来编写一个简单的 Hello World 应用程序。

  1. 创建一个主类 HelloWorldApplication,添加 @SpringBootApplication 注解。
  2. 定义一个简单的 HTTP 请求处理器 HelloController,处理 /hello 请求。

示例代码

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 HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

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

运行项目

在 IntelliJ IDEA 中,右键点击 HelloWorldApplication 类,选择 Run 'HelloWorldApplication.main()',然后在浏览器中访问 http://localhost:8080/hello,即可看到 Hello World! 文字。

常用注解解析
@SpringBootApplication 注解详解

@SpringBootApplication 是一个组合注解,等价于 @Configuration@EnableAutoConfiguration@ComponentScan。这个注解是所有 Spring Boot 应用程序的主入口点。

  • @Configuration:标记 Spring Boot 应用程序的主配置类。
  • @EnableAutoConfiguration:启用自动配置。
  • @ComponentScan:扫描指定包路径下的所有 Spring 组件,从而保证所有组件都能被 Spring 容器管理。

实例代码

package com.example.demo;

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);
    }
}
@Controller、@Service、@Repository、@Component的使用

这些注解是 Spring 的基础注解,用于定义 Spring 管理的组件。它们可以用于任何 Spring 组件,但通常它们会与 @ComponentScan 一起使用,通过扫描指定包路径下的所有组件来自动注册这些组件。

  • @Controller:用于标记一个类为 Spring MVC 的控制器,处理 HTTP 请求。
  • @Service:用于标记服务类,通常包含业务逻辑。
  • @Repository:用于标记数据访问对象,通常用于数据访问层,如访问数据库。
  • @Component:通用注解,用于标记任何 Spring 组件。

示例代码

// Controller 示例
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 World!";
    }
}

// Service 示例
package com.example.demo.service;

import org.springframework.stereotype.Service;

@Service
public class HelloService {
    public String hello() {
        return "Hello Service!";
    }
}

// Repository 示例
package com.example.demo.repository;

import org.springframework.stereotype.Repository;

@Repository
public class HelloRepository {
    public String hello() {
        return "Hello Repository!";
    }
}

// Component 示例
package com.example.demo;

import org.springframework.stereotype.Component;

@Component
public class HelloComponent {
    public String hello() {
        return "Hello Component!";
    }
}
其他常用注解介绍
  • @Autowired:用于自动装配依赖,简化代码。如果有一个属性需要注入依赖,只需要在属性前添加 @Autowired 注解。
  • @Value:用于注入属性值,常用于配置属性。
  • @ConfigurationProperties:用于绑定和验证外部属性,通常用于复杂属性的绑定。

示例代码

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "myapp")
public class AppConfig {
    private String name;
    private int age;
    private List<String> hobbies;

    @Autowired
    private HelloComponent helloComponent;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
}
``

在 `application.properties` 中添加配置:
```properties
myapp.name=John
myapp.age=30
myapp.hobbies=Reading,Swimming
整合常用技术
整合Spring MVC和Thymeleaf

Spring Boot 可以很容易地与 Spring MVC 和 Thymeleaf 集成,以创建基于模板的 Web 应用程序。

示例代码

<!-- pom.xml 添加依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

创建一个简单的控制器,返回一个 Thymeleaf 模板:

package com.example.demo.controller;

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

@Controller
public class ThymeleafController {
    @GetMapping("/thymeleaf")
    public String thymeleaf(Model model) {
        model.addAttribute("name", "John");
        return "thymeleaf";
    }
}

创建一个 Thymeleaf 模板文件 src/main/resources/templates/thymeleaf.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>
整合MyBatis和JPA

Spring Boot 也可以与 MyBatis 和 JPA 一起使用。这两种数据库访问框架都提供了 Spring Boot 的启动器,使得集成变得简单。

示例代码

使用 MyBatis:

<!-- pom.xml 添加依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

application.properties 中添加数据库配置:

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

使用 JPA:

<!-- pom.xml 添加依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

application.properties 中添加 Hibernate 配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

创建一个简单的 JPA 实体类:

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.AUTO)
    private Long id;
    private String name;
    private String email;

    // getters and setters
}

创建一个简单的 JPA Repository:

package com.example.demo.repository;

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

public interface UserRepository extends JpaRepository<User, Long> {
}
整合Redis和RabbitMQ

Spring Boot 提供了对 Redis 和 RabbitMQ 的支持,通过添加相应的依赖,Spring Boot 可以自动配置这些技术。

示例代码

使用 Redis:

<!-- pom.xml 添加依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.properties 中添加 Redis 配置:

spring.redis.host=localhost
spring.redis.port=6379

使用 RabbitMQ:

<!-- pom.xml 添加依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.properties 中添加 RabbitMQ 配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

创建一个简单的消息发布者:

package com.example.demo.publisher;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MessagePublisher {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private Queue queue;

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend(queue.getName(), message);
    }
}

创建一个简单的消息接收器:

package com.example.demo.consumer;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.util.concurrent.atomic.AtomicInteger;

@Component
public class MessageConsumer {
    private AtomicInteger counter = new AtomicInteger();

    @RabbitListener(queues = "hello-queue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
        counter.incrementAndGet();
    }
}
项目配置和运行
应用配置详解

Spring Boot 应用可以通过 application.propertiesapplication.yml 文件进行配置。这些配置可以用于指定数据库连接、服务器端口、日志级别等。

示例代码

application.properties 文件示例:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
server.port=8080

application.yml 文件示例:

spring:
  datasource:
  url: jdbc:mysql://localhost:3306/mydatabase
  username: root
  password: root
  driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
  hibernate:
    ddl-auto: update
server:
  port: 8080
启动类的编写

Spring Boot 应用的启动类通常包含 @SpringBootApplication 注解,并且包含一个 main 方法。

示例代码

package com.example.demo;

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 应用的配置,可以通过创建一个配置类来实现。

示例代码

package com.example.demo.config;

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

@Configuration
public class AppConfig {
    @Bean
    public String customProperty() {
        return "Custom Property Value";
    }
}

application.propertiesapplication.yml 中可以引用这个配置:

myapp.custom-property=${customProperty}

或者

myapp:
  custom-property: ${customProperty}
常见问题与调试
常见错误及解决方法

无法启动应用

如果启动 Spring Boot 应用程序时遇到错误,可以检查以下几点:

  • 确保所有依赖项都正确添加。
  • 检查 application.propertiesapplication.yml 文件中的配置,确保没有语法错误。
  • 确保应用的主类包含 @SpringBootApplication 注解。

示例错误和解决方法

错误日志

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null from setDialectResolver

解决方法
确保 application.propertiesapplication.yml 中的数据库配置正确,并且 spring.jpa.hibernate.ddl-auto 配置正确。

调试技巧

Spring Boot 应用可以通过断点调试来快速定位问题。在 IntelliJ IDEA 中,可以在代码中插入断点,并直接运行主类,IDE 会自动进入调试模式。

示例代码

HelloController 类中的 hello 方法中插入断点:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        // 设置断点
        return "Hello World!";
    }
}

在 IntelliJ IDEA 中,右键点击 HelloWorldApplication 类,选择 Debug 'HelloWorldApplication.main()',然后在浏览器中访问 http://localhost:8080/hello,IDE 会自动进入调试模式。

日志配置

Spring Boot 使用 Logback 作为默认的日志框架。可以通过 application.propertiesapplication.yml 文件来配置日志级别和输出位置。

示例代码

# application.properties
logging.level.root=WARN
logging.level.com.example=DEBUG
logging.file=/var/log/app.log

或者

# application.yml
logging:
  level:
    root: WARN
    com.example: DEBUG
  file: /var/log/app.log
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消