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

Springboot资料详解:新手入门教程

标签:
SpringBoot

本文全面介绍了Spring Boot框架的核心概念和使用方法,包括简化配置、生产就绪特性以及嵌入式Servlet容器的使用。文章详细讲解了从环境搭建到开发第一个Spring Boot应用的全过程,并深入探讨了Spring Boot常用注解和数据访问技术。此外,还提供了打包和部署Spring Boot应用的多种方式,包括使用Tomcat和Docker。文中提供的springboot资料对开发者来说极具参考价值。

Spring Boot简介

什么是Spring Boot

Spring Boot 是基于Spring框架的简化初始化配置的框架。它允许开发者快速搭建独立的,生产级别的应用。Spring Boot通过自动配置和约定优于配置的原则简化了Spring应用的开发过程。它提供了大量的默认配置,使得开发者可以专注于业务逻辑的实现,而不是配置细节。

Spring Boot的优势

  1. 简化配置:Spring Boot通过自动配置机制,减少了传统的Spring配置文件的复杂性。开发者只需几行配置,即可启动一个应用。
  2. 生产就绪:Spring Boot内置了对许多生产环境特性的支持,如健康检查、外部配置、监控、日志等。
  3. 无需XML配置:Spring Boot强调约定优于配置,大多数配置可以通过属性文件来完成,不再需要大量的XML配置。
  4. 快速开发:Spring Boot提供了丰富的库支持,如Spring MVC、Spring Data、Security等,极大地提高了开发效率。
  5. 嵌入式Servlet容器:Spring Boot可以嵌入Tomcat、Jetty、Undertow等Servlet容器,使得应用可以独立运行,无需额外的web服务器。

Spring Boot的核心概念

  • Spring Boot Starter:Starter是一个依赖管理模块,它集成了所有必需的依赖,简化了项目的依赖管理。
  • 自动配置:Spring Boot通过自动配置来简化应用程序的配置。它会根据类路径中的依赖,自动配置合理的默认值。
  • 外部化配置:Spring Boot提供了外部化配置的方式,可以在不同的环境下使用不同的配置文件。
  • 健康检查和监控:Spring Boot集成了许多生产级特性,如健康检查、监控等,使得应用更加健壮。
  • Actuator:Actuator提供了许多端点来监控应用的健康状态、配置、日志等信息。例如,可以通过/actuator/health端点获取应用的健康状态。

外部化配置

外部化配置允许开发者根据不同的环境使用不同的配置文件。例如,可以在application.propertiesapplication.yml中定义不同环境下的属性。

# application.properties
spring.profiles.active=prod

或使用YAML格式:

# application.yml
spring:
  profiles:
  active: prod

健康检查

健康检查端点可以用来监控应用的健康状态。通过/actuator/health端点可以获取应用的健康信息。

Spring Boot的Actuator

Actuator提供了许多端点来监控应用的健康状态、配置、日志等信息。例如,可以通过/actuator/health端点获取应用的健康状态。

环境搭建

Java开发环境配置

  1. 安装JDK
    • 下载并安装最新版本的JDK,推荐版本11或更高。
    • 设置环境变量,确保JAVA_HOME指向JDK安装目录,PATH包含%JAVA_HOME%\bin目录。
  2. 验证安装
    • 打开命令行,输入java -version查看是否正确安装JDK。
    • 输入javac -version验证javac编译器是否可用。
      java -version
      javac -version

创建Spring Boot项目

  1. 使用Spring Initializr创建项目
    • 访问Spring Initializr网站(https://start.spring.io/)。
    • 选择项目类型(如Maven项目或Gradle项目)、语言(Java)、Spring Boot版本、依赖(如Web、JPA等)。
    • 下载并解压项目。
  2. 使用IDE创建项目
    • 使用IDEA或Eclipse等工具创建一个新的Spring Boot项目,按照提示选择相应的依赖。

项目依赖管理

Spring Boot使用Maven或Gradle进行依赖管理。以下是一个简单的Maven 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

此配置文件定义了项目的基本信息,包括父POM和依赖。

第一个Spring Boot应用

创建简单的Controller

  1. 创建一个新的Java类,命名为HelloController
  2. HelloController类中定义一个@RestController注解,表示该类是一个控制器。
  3. 在控制器中定义一个处理HTTP GET请求的方法,返回一个简单的字符串。
    
    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!";
}

}


### 运行第一个应用
1. 在IDE中运行Spring Boot主类,该类通常命名为`Application`,并包含`@SpringBootApplication`注解。
2. 确保主类中有`main`方法,用于启动应用。
```java
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);
    }
}

运行应用后,访问http://localhost:8080/hello即可看到返回的"Hello World!"。

解读核心配置文件

Spring Boot的配置文件通常位于src/main/resources目录下,主要有application.propertiesapplication.yml两种格式。

# application.properties
server.port=8080
spring.application.name=demo-app

或使用YAML格式:

# application.yml
server:
  port: 8080
spring:
  application:
    name: demo-app

这些配置文件提供了Spring Boot应用的基本配置,如端口号、应用名称等。Spring Boot会根据这些配置文件中的内容自动配置应用。

Spring Boot常用注解详解

@SpringBootApplication

@SpringBootApplication是一个组合注解,包含了@Configuration@EnableAutoConfiguration@ComponentScan三个注解。

package org.springframework.boot;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.context.annotation.aspectj.EnableSpringConfigured;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@EnableAutoConfiguration
@ComponentScan(excludeFilters={@Filter(type=FilterType.CUSTOM,classes={TypeExcludeFilter.class})})
public @interface SpringBootApplication {
    @AliasFor(annotation = ComponentScan.class, attribute = "excludeFilters")
    Class<?>[] exclude() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "excludeNames")
    String[] excludeName() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "useDefaultFilters")
    boolean defaultFilter() default true;

    @AliasFor(annotation = ComponentScan.class, attribute = "value")
    String[] scanBasePackages() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
    String[] scanBasePackageClasses() default {};
}

@SpringBootApplication注解用于标记Spring Boot应用的主类,该类通常是main方法的入口。

@RestController

@RestController是一个组合注解,由@Controller@ResponseBody组成。

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}

在Spring Boot应用中,@RestController用于标记一个控制器类,该类的每个方法都返回一个响应体,而不是视图。

@Service @Repository @Component

这些是Spring的组件注解,用于标记类作为Spring容器管理的组件。

package org.springframework.stereotype;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    String value() default "";
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
    String value() default "";
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Component {
    String value() default "";
}
  • @Service用于标记服务类。
  • @Repository用于标记数据访问层类。
  • @Component是一个通用的组件标记。

@Autowired

@Autowired用于自动装配依赖。

package org.springframework.beans.factory.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;

@Target({ ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Autowired
public @interface Autowired {
}

@Autowired可以用于字段、属性、方法和构造函数,以自动注入依赖。

@Configuration

@Configuration是一个特殊的@Component,用于标记一个类作为配置类,该类通常包含@Bean注解的方法。

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String[] value() default {};
}

@Configuration通常用于定义Spring配置类,可以通过@Bean注解定义配置的bean。

Spring Boot数据访问

使用Spring Boot操作数据库

Spring Boot为数据库操作提供了多种支持,包括JDBC、JPA、MyBatis等。这里主要介绍使用JPA和Hibernate操作数据库。

配置JPA和Hibernate

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

# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

或使用YAML格式:

# application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

上述配置指定了数据库连接信息和JPA行为。

连接MySQL数据库示例

  1. 创建实体类
    • 使用@Entity注解标记实体类。
    • 定义实体类的属性,并使用@Id注解标记主键。
      
      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 int age;

// Getters and Setters

}

2. 创建Repository接口
   - 使用`@Repository`注解标记Repository接口。
   - 定义CRUD操作方法。
```java
package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.demo.entity.User;

public interface UserRepository extends JpaRepository<User, Long> {
}
  1. 使用Repository
    • 在服务类中注入Repository接口。
    • 使用该接口进行数据库操作。
      
      package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;

@Service
public class UserService {
@Autowired
private UserRepository userRepository;

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

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

}


#### 使用Spring Data JPA简化开发
Spring Data JPA提供了许多简化数据库操作的接口和方法,例如`findAll`、`findById`、`save`等。
```java
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

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

    @GetMapping("/users/save")
    public User saveUser() {
        User user = new User();
        user.setName("John Doe");
        user.setAge(30);
        return userService.saveUser(user);
    }
}

上述代码展示了如何使用Spring Data JPA的Repository接口进行数据库操作。

复杂查询示例

在实际应用中,可能需要进行复杂的数据库查询。例如,可以通过@Query注解自定义查询,或者通过方法名映射查询。

自定义查询

可以使用JPQL或SQL自定义查询。

package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.example.demo.entity.User;

public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u WHERE u.name = :name")
    User findUserByName(@Param("name") String name);
}

方法名映射查询

Spring Data JPA还支持通过方法名映射查询。

package com.example.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.demo.entity.User;

public interface UserRepository extends JpaRepository<User, Long> {

    User findByName(String name);
}

这些查询方法可以被注入到Service或Controller中使用。

Spring Boot项目部署

打包Spring Boot应用

  1. 使用IDE打包
    • 在IDE中,通过Maven或Gradle构建工具的构建菜单进行打包。
    • Maven命令:mvn clean package
    • Gradle命令:gradle build
  2. 打包后的应用位于targetbuild目录下。
    mvn clean package

部署到Tomcat服务器

  1. 将打包后的应用(.war或.jar文件)放置到Tomcat的webapps目录下。
  2. 启动Tomcat服务器。
  3. 访问应用的URL。
    cd /path/to/tomcat
    bin/startup.sh

使用Docker部署示例

  1. 编写Dockerfile
    FROM openjdk:11-jre-slim
    COPY target/*.jar app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
  2. 构建Docker镜像
    docker build -t my-spring-boot-app .
  3. 运行容器
    docker run -p 8080:8080 my-spring-boot-app

    以上步骤展示了如何使用Docker简化Spring Boot应用的部署过程。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消