本文详细介绍了如何从零开始搭建Spring Boot项目实战,包括环境准备、项目创建、核心配置与常用注解的解析,以及数据库集成、RESTful API设计与实现等内容。此外,文章还涵盖了静态资源处理、Thymeleaf模板引擎的应用、页面跳转与表单处理等Web开发技术的集成。最后,提供了项目打包与部署的方法,包括使用Maven和Gradle构建工具,以及通过Docker进行部署和应用监控。Spring Boot项目实战旨在帮助开发者快速构建独立的、生产级别的Spring应用程序。
Spring Boot是由Pivotal公司在2013年春季开发的一个基于Spring框架的开源项目。它的目标是简化Spring应用程序的开发过程,减少配置文件的编写,使开发者能够快速构建独立的、生产级别的基于Spring的应用程序。Spring Boot通过约定优于配置的原则,使得开发人员可以专注于业务逻辑的实现,而不需要过多地关注底层配置和框架的细节。
Java SDK:首先需要安装Java开发工具包(Java Development Kit,JDK)。可以在Oracle官网或OpenJDK官网下载安装。
设置Java环境变量:假设Java安装目录为C:\Program Files\Java\jdk1.8.0_211
,需要在系统环境变量中添加JAVA_HOME
和PATH
变量。
JAVA_HOME
:设置为C:\Program Files\Java\jdk1.8.0_211
PATH
:添加%JAVA_HOME%\bin
java -version
,如果成功显示Java版本信息,说明安装成功。使用Spring Initializr:在浏览器中打开Spring Initializr网站。
选择项目基本信息:设置Group为com.example
,Artifact为demo
,依赖选择Spring Web
。
Generate
按钮,下载生成的压缩包,解压后导入到IDE中。在IDE中打开项目,找到主类DemoApplication.java
并运行:
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); } }
通过在浏览器中访问http://localhost:8080
,可以看到默认的“Hello World”页面,说明项目成功运行。
Spring Boot配置文件主要用于配置应用程序的行为。这两种配置文件在Spring Boot中非常常见:application.properties
和application.yml
。
application.properties
示例# Server configuration server.port=8080 server.context-path=/demo # Database configuration spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Logging configuration logging.level.root=INFO logging.file.name=/logs/app.log
application.yml
示例server: port: 8080 context-path: /demo spring: datasource: url: jdbc:mysql://localhost:3306/demo username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver logging: level: root: INFO file: name: /logs/app.log
@SpringBootApplication
功能:该注解是Spring Boot应用的主类需要的,它包含了@Configuration
、@EnableAutoConfiguration
和@ComponentScan
三个注解。通过该注解,可以标记一个主类,使得Spring Boot能够自动装配所需的组件。
@Configuration
功能:该注解用于定义配置类,表示该类是一个配置类,可以包含一些组件的配置信息。
@EnableAutoConfiguration
功能:该注解告诉Spring Boot根据项目的依赖自动配置Spring。
@SpringBootApplication
一起使用,放在主类上。@ComponentScan
功能:该注解用于指定需要扫描的包,以便找到相应的组件(例如Service、Controller)。
@Value
读取配置文件import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class AppConfig { @Value("${spring.datasource.url}") private String dbUrl; // Getter方法 public String getDbUrl() { return dbUrl; } }
@ConfigurationProperties
绑定配置文件import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties { private String url; private String username; private String password; private String driverClassName; // Getter和Setter方法 }
在application.properties
中配置JDBC连接:
spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
在application.properties
中配置数据源:
spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.maximum-pool-size=10
添加依赖
在pom.xml
中添加JPA依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
实体类
创建一个实体类User
:
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方法 }
Repository
创建一个JPA Repository接口:
import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { }
添加依赖
在pom.xml
中添加MyBatis依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
Mapper文件
创建一个Mapper接口UserMapper
:
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User getUserById(Long id); }
@Transactional
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.sql.DataSource; @Service public class UserService { @Autowired private UserRepository userRepository; @Transactional public void addUser(User user) { userRepository.save(user); } }
通过@Transactional
注解,可以确保方法内的所有操作都在一个事务中执行。如果发生异常,则会回滚事务。
REST(Representational State Transfer)是一种架构风格,它基于HTTP协议,使用标准的HTTP方法(如GET、POST、PUT、DELETE)来操作资源。在Spring Boot中,可以通过定义Controller来实现RESTful API。
定义实体类
public class User { private Long id; private String name; private String email; // Getter和Setter方法 }
创建Repository接口
import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { }
创建Controller
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/users") public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userRepository.findById(id).orElse(null); } @PostMapping public User addUser(@RequestBody User user) { return userRepository.save(user); } @PutMapping("/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { user.setId(id); return userRepository.save(user); } @DeleteMapping("/{id}") public void deleteUser(@PathVariable Long id) { userRepository.deleteById(id); } }
在Controller中使用@RequestBody
注解绑定请求体中的数据:
@PostMapping public User addUser(@RequestBody User user) { return userRepository.save(user); }
使用@Valid
和@NotNull
等注解进行参数校验:
@PostMapping public User addUser(@Valid @RequestBody User user) { return userRepository.save(user); }
Spring Boot默认会处理静态资源,如CSS、JavaScript、图片等。这些静态资源通常放在src/main/resources/static
目录下。
在src/main/resources/static
目录下创建一个index.html
文件:
<!DOCTYPE html> <html> <head> <title>Spring Boot Demo</title> </head> <body> <h1>Welcome to Spring Boot</h1> </body> </html>
访问http://localhost:8080/
,即可看到index.html
的内容。
Thymeleaf是一个适用于Web与独立环境的现代服务器端Java模板引擎。
添加依赖
在pom.xml
中添加Thymeleaf依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
创建HTML模板
在src/main/resources/templates
目录下创建一个index.html
文件:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Spring Boot Thymeleaf Demo</title> </head> <body> <h1 th:text="'Hello, ' + ${name}"></h1> </body> </html>
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", "World"); return "index"; } }
访问http://localhost:8080/thymeleaf
,页面会显示“Hello, World”。
@GetMapping("/redirect") public String redirect() { return "redirect:/thymeleaf"; }
<form th:action="@{/submit}" method="post"> <input type="text" name="name" /> <input type="submit" value="Submit" /> </form>
@PostMapping("/submit") public String submit(@RequestParam String name, Model model) { model.addAttribute("name", name); return "index"; }
Maven是一个基于Java的项目构建工具,可以管理项目的构建、依赖和文档。在pom.xml
中定义项目的所有信息。
Gradle是一个基于Groovy的构建工具,支持声明式的构建脚本,更加灵活。在build.gradle
文件中定义项目的所有信息。
在项目根目录下执行:
mvn clean package
在项目根目录下执行:
./gradlew clean build
在本地或服务器上部署WAR文件到Tomcat服务器。
使用Docker部署Spring Boot应用。
Dockerfile
FROM openjdk:8-jre-alpine VOLUME /tmp COPY target/*.war app.war EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
Docker构建
在项目根目录下执行:
docker build -t springboot-demo .
Docker运行
docker run -p 8080:8080 springboot-demo
Spring Boot提供了多种方式来监控应用,如Actuator端点、Micrometer等。
Actuator端点
添加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
访问http://localhost:8080/actuator
可以查看应用状态信息。
Micrometer
添加依赖:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
访问http://localhost:8080/prometheus
可以查看应用监控数据。
通过以上步骤,可以顺利地完成Spring Boot项目的创建、开发、打包和部署,同时也可以有效地监控应用的运行状态。