0


Spring Boot项目搭建详解:从零开始到实践应用

Spring Boot项目搭建详解:从零开始到实践应用

引言

Spring Boot作为Spring生态系统的一部分,极大地简化了Spring应用的开发和部署过程。通过自动配置和嵌入式服务器,开发者可以快速构建独立运行的Spring应用。本文将详细介绍如何从零开始搭建一个Spring Boot项目,涵盖项目创建、基本配置、常见功能实现及最佳实践。

1. 创建Spring Boot项目

使用Spring Initializr

Spring Initializr是Spring官方提供的项目生成工具,可以快速创建Spring Boot项目。

  1. 打开Spring Initializr网站:https://start.spring.io
  2. 选择项目属性: - Project: Maven Project- Language: Java- Spring Boot: 最新版本- Project Metadata: - Group: com.example- Artifact: demo- Name: demo- Package Name: com.example.demo- Packaging: Jar- Java: 11(或其他版本)
  3. 添加依赖: - Spring Web- Spring Data JPA- MySQL Driver- Spring Boot DevTools- Lombok
  4. 点击“Generate”按钮生成项目,下载并解压缩。

导入IDE

将生成的项目导入到IntelliJ IDEA或其他IDE中,确保项目可以成功构建和运行。

2. 配置项目

配置数据库连接

src/main/resources/application.properties

中配置数据库连接信息:

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

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

创建数据库表

在数据库中创建一个名为

demo

的数据库,并创建一个

User

表:

CREATETABLE`user`(`id`BIGINTNOTNULLAUTO_INCREMENT,`name`VARCHAR(255)NOTNULL,`email`VARCHAR(255)NOTNULL,PRIMARYKEY(`id`));

3. 实现基本功能

创建实体类

src/main/java/com/example/demo/entity

目录下创建

User

实体类:

packagecom.example.demo.entity;importlombok.Data;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;@Data@EntitypublicclassUser{@Id@GeneratedValue(strategy =GenerationType.IDENTITY)privateLong id;privateString name;privateString email;}

创建Repository接口

src/main/java/com/example/demo/repository

目录下创建

UserRepository

接口:

packagecom.example.demo.repository;importcom.example.demo.entity.User;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.stereotype.Repository;@RepositorypublicinterfaceUserRepositoryextendsJpaRepository<User,Long>{}

创建Service类

src/main/java/com/example/demo/service

目录下创建

UserService

类:

packagecom.example.demo.service;importcom.example.demo.entity.User;importcom.example.demo.repository.UserRepository;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;importjava.util.Optional;@ServicepublicclassUserService{@AutowiredprivateUserRepository userRepository;publicList<User>getAllUsers(){return userRepository.findAll();}publicOptional<User>getUserById(Long id){return userRepository.findById(id);}publicUsersaveUser(User user){return userRepository.save(user);}publicvoiddeleteUser(Long id){
        userRepository.deleteById(id);}}

创建Controller类

src/main/java/com/example/demo/controller

目录下创建

UserController

类:

packagecom.example.demo.controller;importcom.example.demo.entity.User;importcom.example.demo.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController@RequestMapping("/users")publicclassUserController{@AutowiredprivateUserService userService;@GetMappingpublicList<User>getAllUsers(){return userService.getAllUsers();}@GetMapping("/{id}")publicResponseEntity<User>getUserById(@PathVariableLong id){return userService.getUserById(id).map(ResponseEntity::ok).orElse(ResponseEntity.notFound().build());}@PostMappingpublicUsercreateUser(@RequestBodyUser user){return userService.saveUser(user);}@DeleteMapping("/{id}")publicResponseEntity<Void>deleteUser(@PathVariableLong id){
        userService.deleteUser(id);returnResponseEntity.noContent().build();}}

测试应用

启动Spring Boot应用,在浏览器或Postman中访问以下API端点进行测试:

  • GET /users:获取所有用户
  • GET /users/{id}:根据ID获取用户
  • POST /users:创建新用户
  • DELETE /users/{id}:删除用户

4. 常见功能实现

全局异常处理

src/main/java/com/example/demo/exception

目录下创建全局异常处理类

GlobalExceptionHandler

packagecom.example.demo.exception;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.context.request.WebRequest;@ControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(Exception.class)publicResponseEntity<?>handleGlobalException(Exception ex,WebRequest request){returnnewResponseEntity<>(ex.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);}@ExceptionHandler(ResourceNotFoundException.class)publicResponseEntity<?>handleResourceNotFoundException(ResourceNotFoundException ex,WebRequest request){returnnewResponseEntity<>(ex.getMessage(),HttpStatus.NOT_FOUND);}}

分页和排序

UserService

中添加分页和排序功能:

packagecom.example.demo.service;importcom.example.demo.entity.User;importcom.example.demo.repository.UserRepository;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageRequest;importorg.springframework.data.domain.Pageable;importorg.springframework.data.domain.Sort;importorg.springframework.stereotype.Service;importjava.util.List;importjava.util.Optional;@ServicepublicclassUserService{@AutowiredprivateUserRepository userRepository;publicList<User>getAllUsers(){return userRepository.findAll();}publicPage<User>getUsersWithPagination(int page,int size){Pageable pageable =PageRequest.of(page, size);return userRepository.findAll(pageable);}publicList<User>getUsersWithSorting(String field){return userRepository.findAll(Sort.by(Sort.Direction.ASC, field));}publicOptional<User>getUserById(Long id){return userRepository.findById(id);}publicUsersaveUser(User user){return userRepository.save(user);}publicvoiddeleteUser(Long id){
        userRepository.deleteById(id);}}

UserController

中添加分页和排序端点:

@RestController@RequestMapping("/users")publicclassUserController{@AutowiredprivateUserService userService;@GetMappingpublicList<User>getAllUsers(){return userService.getAllUsers();}@GetMapping("/page")publicPage<User>getUsersWithPagination(@RequestParamint page,@RequestParamint size){return userService.getUsersWithPagination(page, size);}@GetMapping("/sort")publicList<User>getUsersWithSorting(@RequestParamString field){return userService.getUsersWithSorting(field);}@GetMapping("/{id}")publicResponseEntity<User>getUserById(@PathVariableLong id){return userService.getUserById(id).map(ResponseEntity::ok).orElse(ResponseEntity.notFound().build());}@PostMappingpublicUsercreateUser(@RequestBodyUser user){return userService.saveUser(user);}@DeleteMapping("/{id}")publicResponseEntity<Void>deleteUser(@PathVariableLong id){
        userService.deleteUser(id);returnResponseEntity.noContent().build();}}

使用Swagger生成API文档

  1. 添加Swagger依赖:<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>
  2. 配置Swagger:packagecom.example.demo.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importspringfox.documentation.builders.PathSelectors;importspringfox.documentation.builders.RequestHandlerSelectors;importspringfox.documentation.spi.DocumentationType;importspringfox.documentation.spring.web.plugins.Docket;importspringfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration@EnableSwagger2publicclassSwaggerConfig{@BeanpublicDocketapi(){returnnewDocket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo")).paths(PathSelectors.any()).build();}}
  3. 启动应用,访问http://localhost:8080/swagger-ui/查看API文档。

5. 最佳实践

配置管理

使用

application.properties

application.yml

进行配置管理,区分不同环境的配置。

spring:profiles:active: dev

---spring:profiles: dev
  datasource:url: jdbc:mysql://localhost:3306/demo_dev
    username: root
    password: root

---spring:profiles: prod
  datasource:url: jdbc:mysql://localhost:3306/demo_prod
    username: prod_user
    password: prod_pass

日志管理

使用

SLF4J

Logback

进行日志管理,配置日志级别和输出格式。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>

src/main/resources

目录下创建

logback-spring.xml

<configuration><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender><rootlevel="info"><appender-refref="STDOUT"/></root><loggername="com.example.demo"level="debug"/></configuration>

安全性

使用Spring Security保护应用,配置身份认证和授权。

  1. 添加Spring Security依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
  2. 配置Spring Security:packagecom.example.demo.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security.config.annotation.web.configuration.EnableWebSecurity;importorg.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;importorg.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;importorg.springframework.security.crypto.password.PasswordEncoder;@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{ http .authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}@BeanpublicPasswordEncoderpasswordEncoder(){returnnewBCryptPasswordEncoder();}}

结语

通过本文的讲解,你应该已经掌握了从零开始搭建Spring Boot项目的全过程,涵盖了项目创建、基本配置、常见功能实现及最佳实践。希望这篇文章能帮助你在实际开发中更高效地构建Spring Boot应用。如果你喜欢这篇文章,请分享给更多的Java开发者,并关注我们的Spring Boot专题,获取更多精彩内容和最新资讯!

你的支持是我们前进的最大动力!

qq群

私人微信

私人微信

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/qq_19749625/article/details/139293181
版权归原作者 阿里渣渣java研发组-群主 所有, 如有侵权,请联系我们删除。

“Spring Boot项目搭建详解:从零开始到实践应用”的评论:

还没有评论