本文将带你深入了解Spring Boot项目实战,从环境搭建到第一个Spring Boot应用的创建,再到配置和整合技术,帮助你快速掌握Spring Boot的开发流程和常用配置。
Spring Boot 是一个用于简化新Spring应用程序初始搭建以及开发过程的框架。使用Spring Boot,你可以创建一个独立的基于Spring的应用程序。它允许你进行快速的脚手架开发,提供了默认配置以减少配置,同时允许你明确地配置你所需要的特性。
spring-boot-starter-web
、spring-boot-starter-data-jpa
等。在开始Spring Boot开发之前,你需要准备以下环境:
使用Maven的pom.xml
文件进行配置,如下所示:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 其他依赖,如数据库连接 --> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
使用Gradle的build.gradle
文件进行配置,如下所示:
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // 其他依赖,如数据库连接 }
使用IDEA创建一个新的Spring Boot项目。在IntelliJ IDEA中,点击 File -> New -> Project
,选择 Spring Initializr
,输入项目的基本信息并选择所需的功能模块,例如Web
、JPA
等。IDEA会自动生成项目结构和基础代码。
配置项目的pom.xml
或build.gradle
文件,确保包含Spring Boot的启动依赖。例如,使用Maven的pom.xml
文件可以这样设置:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 其他依赖,如数据库连接 --> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
创建一个简单的Spring Boot应用,该应用在访问/hello
路径时返回一个简单的字符串。
src/main/java
目录下创建一个包结构,例如com.example.demo
。DemoApplication.java
,代码如下: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 DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @RestController class HelloWorldController { @GetMapping("/hello") public String hello() { return "Hello World!"; } }
DemoApplication
类。http://localhost:8080/hello
,你会看到输出Hello World!
。一个典型的Spring Boot项目的目录结构如下:
src ├── main │ ├── java │ │ └── com.example.demo │ │ ├── DemoApplication.java │ │ └── HelloWorldController.java │ ├── resources │ │ ├── application.properties │ │ └── static │ │ └── index.html └── test └── java └── com.example.demo └── DemoApplicationTests.java
Spring Boot 通过配置文件application.properties
或application.yml
来进行配置。这些配置文件位于src/main/resources
目录下。
例如,application.properties
可以包含数据库连接配置:
spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring-boot-starter-actuator
依赖来启用。Actuator提供了一系列管理端点,用于监控和管理应用。management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always
spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
你可以创建自定义配置类来覆盖默认的配置。例如,创建一个CustomProperties
类:
package com.example.demo.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "custom") public class CustomProperties { private String property1; private String property2; // Getter and Setter public String getProperty1() { return property1; } public void setProperty1(String property1) { this.property1 = property1; } public String getProperty2() { return property2; } public void setProperty2(String property2) { this.property2 = property2; } }
在application.properties
中配置属性:
custom.property1=value1 custom.property2=value2
使用注入属性:
import com.example.demo.config.CustomProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class CustomPropertiesController { @Autowired private CustomProperties customProperties; @GetMapping("/custom") public String getCustomProperties() { return "Property1: " + customProperties.getProperty1() + ", Property2: " + customProperties.getProperty2(); } }
使用Spring Boot整合数据库通常涉及JPA(Java Persistence API)或MyBatis等ORM工具。以下是一个使用Spring Data JPA的例子:
pom.xml
:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
配置数据库连接信息到application.properties
。
User.java
: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 username; private String password; // Getter and Setter }
UserRepository.java
: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> { }
UserService.java
: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; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getAllUsers() { return userRepository.findAll(); } }
UserController.java
:package com.example.demo.controller; import com.example.demo.entity.User; import com.example.demo.service.UserService; 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; import org.springframework.web.servlet.ModelAndView; import java.util.List; @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping public ModelAndView getUsers() { List<User> users = userService.getAllUsers(); ModelAndView modelAndView = new ModelAndView("user-list"); modelAndView.addObject("users", users); return modelAndView; } }
要将Spring Boot与MyBatis整合,可以使用spring-boot-starter-mybatis
依赖:
pom.xml
:<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
mybatis.mapper-locations=classpath:mapper/*.xml
UserMapper.java
:package com.example.demo.mapper; import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { List<User> getAllUsers(); }
resources
目录下创建mapper
目录,并添加相应的XML文件UserMapper.xml
:<mapper namespace="com.example.demo.mapper.UserMapper"> <select id="getAllUsers" resultType="com.example.demo.entity.User"> SELECT id, username, password FROM user </select> </mapper>
MybatisService.java
:package com.example.demo.service; import com.example.demo.entity.User; import com.example.demo.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class MybatisService { @Autowired private UserMapper userMapper; public List<User> getAllUsers() { return userMapper.getAllUsers(); } }
要将Spring Boot与Redis整合,可以使用spring-boot-starter-data-redis
依赖:
pom.xml
:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
spring.redis.host=localhost spring.redis.port=6379
RedisService.java
:package com.example.demo.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.concurrent.TimeUnit; @Service public class RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void setString(String key, String value, long timeout) { redisTemplate.opsForValue().set(key, value); redisTemplate.expire(key, timeout, TimeUnit.SECONDS); } public String getString(String key) { return (String) redisTemplate.opsForValue().get(key); } }
RedisController.java
:package com.example.demo.controller; import com.example.demo.service.RedisService; 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; import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/redis") public class RedisController { @Autowired private RedisService redisService; @GetMapping("/set") public String setString() { redisService.setString("testKey", "testValue", 10); return "Set testKey = testValue"; } @GetMapping("/get") public String getString() { return redisService.getString("testKey"); } }
打包Spring Boot项目以生成可以在任何机器上运行的可执行Jar文件。在IDEA中,可以通过Maven或Gradle的命令行工具进行打包。
Build -> Build Artifacts
,选择你生成的spring-boot-archetype:jar
。mvn clean package
或者:
./gradlew bootJar
将打包好的Jar文件部署到Tomcat服务器上,需要确保Tomcat服务器已经安装并配置好。
java -jar yourapp.jar
也可以配置Tomcat的server.xml
,将你的应用添加到<Host>
标签下的<Context>
元素中:
<Context docBase="/path/to/yourapp.jar" path="/yourapp" />
或者使用Tomcat的管理界面进行部署。
将Spring Boot应用部署到云服务器上,首先需要确保服务器已经安装了Java环境并且映射了相关的端口。
java -jar yourapp.jar
或者使用服务管理工具如Supervisor来管理和守护你的应用:
sudo apt-get update sudo apt-get install supervisor
创建一个配置文件/etc/supervisor/conf.d/yourapp.conf
:
[program:yourapp] command=/usr/bin/java -jar /path/to/yourapp.jar directory=/path/to/yourapp autostart=true autorestart=true stderr_logfile=/var/log/yourapp.err.log stdout_logfile=/var/log/yourapp.out.log
运行以下命令:
supervisorctl update supervisorctl start yourapp
这样你的Spring Boot应用就可以在云服务器上运行,并且会自动重启。