Spring Boot项目开发入门介绍了如何简化新Spring应用的搭建和开发过程,通过自动配置和约定优于配置的方式,使开发者能够快速创建独立运行的应用程序。文章详细讲解了开发环境的搭建、项目创建、核心概念以及常用功能的实现,并提供了打包和部署到不同环境的指导。
Spring Boot 是一个基于Spring框架的项目,旨在简化新Spring应用的初始搭建以及开发过程。它通过约定优于配置的方式,尽可能减少项目配置,使开发者能够快速搭建起独立运行的应用程序。
确保系统中安装了Java环境,并配置好环境变量。可以通过命令java -version
来检查Java环境是否安装成功。
推荐使用IDEA或Eclipse作为开发工具,这里以IDEA为例:
# 安装IDEA sudo snap install intellij-idea-community --classic
Maven是一个强大的项目管理和构建工具,用于管理和构建基于项目对象模型(POM)的项目。
# 安装Maven sudo apt-get update sudo apt-get install maven
在IDEA中,可以通过Spring Initializr快速创建一个新的Spring Boot项目。
File > New > Project
,选择Spring Initializr
。Maven
作为打包方式,选择合适的语言(Java),选择版本(如Java 8或11)。Group ID
、Artifact ID
等。Web
、JPA
等。Finish
完成项目的创建。使用Spring Initializr创建新的Spring Boot项目,选择合适的语言(Java)和版本(如Java 8或11),并选择所需的功能模块,如Web
、JPA
等。
Spring Boot项目的基本结构如下:
src/main/java
: 存放Java源代码,如控制器、服务、实体类等。src/main/resources
: 存放配置文件和静态资源文件,如application.properties
或application.yml
。pom.xml
: Maven的项目配置文件,用于管理项目的依赖。src/test/java
: 测试代码的存放位置。src/test/resources
: 测试资源文件的存放位置。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); } }
在src/main/java
目录下找到启动类,通常命名为Application
或与项目名称一致,并使用@SpringBootApplication
注解标记。
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); } }
在IDEA中,可以通过运行DemoApplication
类中的main
方法来启动应用。启动后,访问http://localhost:8080
,如果看到默认的欢迎页面,则说明应用已经成功启动。
Spring Boot通过约定优于配置的方式自动配置各种组件,如数据库连接、web服务等。自动配置机制基于@SpringBootApplication
注解,该注解包含了@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
三个注解。
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
Starter
依赖是Spring Boot提供的一系列预定义依赖,方便开发者快速集成常用的功能模块。例如,使用spring-boot-starter-web
依赖可以快速集成web功能。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 其他依赖 --> </dependencies>
Spring Boot支持两种配置文件格式:application.properties
和application.yml
。这些配置文件通常存放在src/main/resources
目录下,用于定义应用的属性和配置。
例如,配置端口号:
# application.properties server.port=8080
或使用application.yml
格式:
# application.yml server: port: 8080
使用@RestController
注解标记控制器类,使用@RequestMapping
注解定义URL映射。
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!"; } }
启动应用后,访问http://localhost:8080/hello
,检查是否返回Hello, World!
。
在pom.xml
中添加spring-boot-starter-data-jpa
和spring-boot-starter-embedds-h2
依赖:
<!-- JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 内置数据库H2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
在application.properties
中配置数据源,如H2数据库:
# 使用H2数据库 spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=root spring.datasource.password=root spring.h2.console.enabled=true spring.h2.console.path=/h2-console
定义一个简单的实体类User
:
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 String email; // 构造函数、getter和setter方法 }
定义一个UserRepository
接口,继承JpaRepository
接口:
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> { }
通过UserRepository
接口完成数据库访问操作:
package com.example.demo.service; import com.example.demo.entity.User; import com.example.demo.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @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 Boot默认支持静态资源的访问,如CSS、JS、图片等。这些资源通常存放于src/main/resources/static
目录下。
例如,在src/main/resources/static
目录下创建index.html
文件:
<!DOCTYPE html> <html> <head> <title>首页</title> </head> <body> <h1>欢迎使用Spring Boot</h1> </body> </html>
Spring Boot默认使用java.util.logging
作为日志框架,也可以通过配置文件切换到其他框架,如logback
。
在application.properties
中配置日志级别:
# 设置日志级别 logging.level.root=INFO
Spring Boot提供了一种全局异常处理机制,通过定义全局的异常处理器来统一处理应用中的异常。
定义一个全局异常处理器类GlobalExceptionHandler
:
package com.example.demo.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(Exception.class) public ResponseEntity<String> handleException(Exception ex) { return new ResponseEntity<>("发生异常:" + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } }
在控制器方法中抛出异常,以测试全局异常处理器:
package com.example.demo.controller; import com.example.demo.exception.GlobalExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { throw new RuntimeException("发生异常"); } }
使用Maven或Gradle打包Spring Boot应用,生成一个独立的可运行的jar包。
在项目根目录下运行以下命令:
mvn clean package
打包完成后,在target
目录下可以找到生成的jar包。
在项目根目录下运行以下命令:
./gradlew bootJar
打包完成后,在build/libs
目录下可以找到生成的jar包。
将生成的jar包复制到目标服务器,通过命令运行jar包:
# 执行jar包 java -jar your-app.jar
Procfile
文件,内容如下:web: java -jar target/your-app.jar
heroku create your-app-name git push heroku master
Dockerfile
文件,内容如下:FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t your-app-name .
docker run -d -p 8080:8080 your-app-name