Spring Boot快速搭建项目

简介: Spring Boot是一个基于Spring Framework的子项目,旨在简化Spring应用程序的初始化过程、开发过程和部署过程,并提供快速、敏捷的开发环境

@TOC

一、Spring Boot简介

Spring Boot是一个基于Spring Framework的子项目,旨在简化Spring应用程序的初始化过程、开发过程和部署过程,并提供快速、敏捷的开发环境。Spring Boot从以下三个方面提高开发效率:

1 Spring Boot的起源

Spring Boot的推出旨在简化Spring应用程序的开发、部署及运行。它采用约定大于配置的理念默认提供了若干项目常用依赖和自动化配置,使开发者可以更简单地入门Spring以及用更少的时间和精力搭建Spring项目。

2 Spring Boot的核心特点

  • 简化配置:Spring Boot采用“约定优于配置”的设计思想。
  • 自动装配:Spring Boot能够根据项目的依赖信息自动配置Spring应用程序,并提供了很多功能。
  • 无代码生成:Spring Boot无需任何代码生成,通过简单的配置即可生成可运行的Spring应用程序。
  • 微服务:Spring Boot非常适合于构建微服务应用程序。
  • 集成测试:Spring Boot支持快速集成测试,方便开发人员进行单元测试和集成测试。

3 Spring Boot的优势

  • 快速启动:Spring Boot应用程序具有非常快的启动速度,同时也可以减少大量的开发时间和成本。
  • 容易部署:Spring Boot应用程序可以打成jar包或者war包进行部署。
  • 易于维护:Spring Boot应用程序采用配置文件的方式,易于维护。
  • 开箱即用:Spring Boot提供了很多内置了许多日常开发中的功能,在很多情况下不再需要额外添加第三方依赖和插件。
  • 生态系统丰富:Spring Boot生态系统非常丰富,提供了许多优秀的开源项目,如Spring Cloud、Spring Data等。

二、Spring Boot快速搭建项目

Spring Boot提供了多种项目搭建方式,在大多数情况下使用Spring Initializr创建项目是最受欢迎的。

1 Spring Boot的项目搭建方式

使用Spring Initializr创建项目

使用Spring Initializr能够简单地快速创建一个适用于Spring Boot的新项目。Spring Initializr不仅提供了Web界面和命令行工具两种方式,还提供了众多可选的配置选项。

使用Spring Boot CLI创建项目

Spring Boot CLI是一个命令行工具,可以通过命令行创建和运行Spring Boot应用程序。对于熟悉命令行且不希望通过Web界面来创建项目的开发人员,Spring Boot CLI是一个不错的选择。

使用Spring Boot CLI和Groovy DSL创建项目

Groovy DSL是一种基于Groovy语言的DSL,可以用来创建和运行Spring Boot应用程序,其极大地改进了开发人员的开发效率。

2 Spring Boot项目结构介绍

按照Spring Boot的推荐结构,主要可分为应用主类及配置文件、控制器层、服务层和数据层四个部分。

应用主类及配置文件

应用主类是Spring Boot应用程序的入口点,通过配置文件来指定数据库连接、端口等信息。

配置文件分为application.properties和application.yml格式两种,末尾的文件格式为用于表示yaml文件格式中的列表的大括号或方括号是不支持的。

控制器层

控制器层负责接收HTTP请求、处理HTTP响应,并调用服务层、数据层等进行处理。使用@RestController注解让Spring Boot应用程序变成一个完全的Web服务。

服务层

服务层负责业务处理,并调用数据层的相关方法进行数据操作。一般使用@Service注解标注服务类。

数据层

数据层负责数据的存储和读取,可以使用Spring Data JPA等框架进行数据操作。

Spring Boot的自动配置原理

Spring Boot的自动化配置能够在保持Spring开发人员认知度的同时,通过依赖分析和智能基础设施风格来自动配置Spring应用程序。Spring Boot本身不依赖于代码生成和复杂配置方式。

Spring Boot的自动配置特点

Spring Boot的自动配置以约定大于配置为核心原则,特点在于:

  • 有限的开销:只有启用的自动化配置会自动配置应用程序。
  • 安全原则:Spring Boot不会在不明确配置时自动启用基础设施。
  • 可伸缩性:应用程序可以从自动配置中获益,也可以禁用对他们没有用处的配置。

Spring Boot自动配置的加载顺序

当@EnableAutoConfiguration注解启用自动配置时,Spring Boot会按照一定的规则依次加载自动配置项,直到完全加载完成。自动配置加载顺序如下:

  1. spring-boot-autoconfigure.jar/META-INF/spring.factories的EnableAutoConfiguration。
  2. 当前应用程序的classpath根据条件自动配置的来自META-INF/spring.factories的bean定义。

三、Spring Boot开发中的常用技术

1 Spring Boot的MVC架构

1.1 Spring Boot MVC的基本概念

在Spring Boot应用程序的开发和设计中常用到各种技术和框架,其中Spring Boot的MVC架构是一种常见的开发方式。该架构提供了一个模型-视图-控制器(MVC)的体系结构,简化了Web应用程序的开发过程。

在整个架构中可以将应用程序分成三个部分:

  • 模型(Model):负责数据的存储和传递,并提供数据操作的方法。
  • 视图(View):用于展示数据,通常是一个HTML页面。
  • 控制器(Controller):接收用户请求并进行相应的操作。

在Spring Boot MVC中常使用@Controller注解标注控制器类,使用@RequestMapping注解标注控制器类中的方法,指定响应请求的URL地址。在方法中可以使用@RequestParam@PathVariable注解获取请求参数或路径参数。

代码示例:

@Controller
@RequestMapping("/users")
public class UserController {
   
    @GetMapping("/{userId}")
    public String getUserInfo(@PathVariable Long userId, Model model) {
   
        // 根据userId从数据库中获取User对象信息
        User user = userService.getUserById(userId);
        // 将查询到的User对象信息添加到Model中
        model.addAttribute("userInfo", user);
        // 返回名为"userInfo.html"的视图页面
        return "userInfo.html";
    }

    @PostMapping("/{userId}/update")
    public String updateUser(@PathVariable Long userId, 
                             @RequestParam("userName") String userName,
                             @RequestParam("userAge") int userAge) {
   
        // 根据userId更新数据库中对应User对象的userName和userAge
        userService.updateUser(userId, userName, userAge);
        // 重定向到/users/{userId}接口进行查询
        return "redirect:/users/{userId}";
    }
}

1.2 Spring Boot MVC开发注意事项

  • 在编写@Controller时要注意每个方法的返回类型为String类型,并通过返回值指定要返回的视图名称或指定重定向或转发的地址。
  • 在开发应用程序时,建议将JSP视图文件放置在/resources/templates目录下,并将所有静态文件(如css、js和图片等)放置在/resources/static目录下。
  • 当遇到复杂的数据操作逻辑时,可以使用Service层,对具体业务逻辑进行封装,降低控制器的负担。
  • 在开发应用程序时,应充分利用Spring Boot的自动化配置功能,简化配置工作。

2 Spring Boot整合MyBatis框架

MyBatis是一款Java持久层框架通过XML或注解方式将对象映射到数据库表中。Spring Boot提供了非常方便的方式来集成MyBatis框架,使得开发人员能够更加高效、便捷地进行数据操作。

2.1 Spring Boot整合MyBatis的配置方法

在进行Spring Boot整合MyBatis框架的配置时可以按照以下步骤进行:

  • 确保已经配置好MyBatis和MyBatis-Spring等相关依赖。
  • 确认pom.xml文件中已经添加了数据库驱动相关依赖。
  • 在application.properties文件中配置数据源相关信息。
  • 创建MyBatis的映射文件或使用注解方式进行数据操作。

application.properties中的数据源配置:

# 数据库驱动配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库连接信息配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

2.2 MyBatis的基本CRUD操作

通过MyBatis框架进行数据操作需要编写映射文件或注解,并使用SqlSession接口的方法执行SQL语句。MyBatis的基本CRUD操作如下:

  • 查询数据操作:使用select查询语句,可以通过注解方式或XML方式进行实现。
  • 插入数据操作:使用insert插入语句,可以通过注解方式或XML方式进行实现。
  • 更新数据操作:使用update更新语句,可以通过注解方式或XML方式进行实现。
  • 删除数据操作:使用delete删除语句,可以通过注解方式或XML方式进行实现。

MyBatis的基本CRUD操作:

<!-- 数据库表中的数据对象映射配置文件 -->
<!-- 查询操作(通过user_id查询对应的User对象信息) -->
<select id="getUserById" parameterType="long" resultMap="userResultMap">
    select * from t_user where user_id = #{userId}
</select>
<!-- 插入操作(插入一条新的User对象信息) -->
<insert id="insertUser" parameterType="User">
    insert into t_user(user_id,user_name,user_age) values(#{userId},#{userName},#{userAge})
</insert>
<!-- 更新操作(根据user_id更新对应的User对象信息) -->
<update id="updateUserById" parameterType="User">
    update t_user set user_name = #{userName}, user_age = #{userAge} where user_id = #{userId}
</update>
<!-- 删除操作(根据user_id删除对应的User对象信息) -->
<delete id="deleteUserById" parameterType="long">
    delete from t_user where user_id = #{userId}
</delete>

3 Spring Boot整合Spring Security框架

Spring Security是一款基于Spring Framework的安全框架能够为应用程序提供身份验证和访问控制等安全功能。Spring Boot提供了非常方便的方式来集成Spring Security框架,使得开发人员能够更加高效、便捷地开发安全应用程序。

3.1 Spring Security的安全认证机制

Spring Security的安全认证机制包括自定义用户和密码的认证方式,支持基于内存、LDAP、JDBC等多种用户信息认证方式。在Spring Boot应用程序中,可以通过注解方式配置安全认证信息。

Spring Security的安全认证配置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   
    @Autowired
    private AuthUserDetailServiceImpl authUserDetailService;
    @Autowired
    private AuthAccessDeniedHandler accessDeniedHandler;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
   
        http.authorizeRequests()
                .antMatchers("/", "/index").permitAll()  // 设置首页和登录页允许匿名访问
                .antMatchers("/admin/**").hasRole("ADMIN")  // 设置/admin下的URL需要ADMIN角色才可以访问
                .anyRequest().authenticated()  // 其他URL都需要身份认证
                .and()
                .formLogin()
                .loginPage("/login") // 设置登录页面
                .defaultSuccessUrl("/index") // 登录成功后默认跳转的页面
                .failureUrl("/login?error")
                .permitAll()
                .and()
                .logout()
                .permitAll()
                .and()
                .exceptionHandling()
                .accessDeniedHandler(accessDeniedHandler); // 设置异常处理器
        http.csrf().disable(); // 关闭csrf保护
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
   
        auth.userDetailsService(authUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
    }
}

3.2 Spring Security的常用配置方法

Spring Security的常用配置方法主要包括以下几个方面:

  • 配置基于内存的用户信息认证方式。
  • 配置基于文件的用户信息认证方式。
  • 配置基于数据库的用户信息认证方式。
  • 配置基于角色的访问控制。
  • 配置HTTPS访问方式。

基于内存的用户信息认证方式:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
   
        auth.inMemoryAuthentication()
                .withUser("user").password("{noop}password").roles("USER")
                .and()
                .withUser("admin").password("{noop}password").roles("USER", "ADMIN");
    }
}

四、Spring Boot项目的部署与打包

1 Spring Boot项目的打包方式

1.1 jar包的打包方式

在使用Spring Boot开发应用程序时常用的打包方式是打成可执行的jar包,并通过命令行或脚本的方式启动应用程序。可以通过以下命令进行打包:

mvn clean package

在target目录下会生成一个以应用程序名称和版本号命名的jar包。同时在pom.xml文件中需要添加插件,并指定打包类型为jar。

pom.xml文件中进行jar包打包方式的配置:

<!-- 打包方式为jar -->
<packaging>jar</packaging>

<!-- jar包打包插件的配置 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

1.2 war包的打包方式

若需要将Spring Boot应用程序部署到Web容器中,可以将应用程序打包成war包。可以通过以下命令进行打包:

mvn clean package -Dmaven.test.skip=true

在target目录下会生成一个以应用程序名称和版本号命名的war包。同时,在pom.xml文件中需要添加插件,并指定打包类型为war。

pom.xml文件中进行war包打包方式的配置:

<!-- 打包方式为war -->
<packaging>war</packaging>

<!-- war包打包插件的配置 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2 Spring Boot项目的部署方法

2.1 传统方式的部署

在传统方式下将应用程序部署到Web容器中,可以使用Tomcat、Jetty等各种Web容器。具体的部署步骤如下:

  1. 将war包复制到Web容器中的WebApps目录下。
  2. 启动Web容器,在控制台中查看应用程序启动状态。
  3. 通过浏览器访问Web容器提供的URL地址,即可访问应用程序。

2.2 Docker容器的部署方式

Docker容器是一种轻量级的虚拟化技术能够将应用程序打包成一个镜像,并可在不同的环境中进行部署和运行。使用Docker容器可以快速地部署应用程序,避免了环境差异和依赖冲突的问题。

具体的部署步骤如下:

  1. 创建Dockerfile文件,指定基础镜像和应用程序的部署方式,并将应用程序打包成镜像文件。
  2. 构建Docker镜像,将Dockerfile文件中的配置参数和应用程序打包成一个镜像文件。
  3. 运行Docker容器,启动应用程序并将容器映射到外部端口,可以通过浏览器访问外部端口来访问应用程序。

Dockerfile文件的配置:

# 指定基础镜像
FROM openjdk:8-jdk-alpine

# 构建应用程序
COPY ./target/myapplication.jar /app/

# 暴露端口
EXPOSE 8080

# 启动应用程序
CMD ["java", "-jar", "/app/myapplication.jar"]

五、小结回顾

1 Spring Boot的发展趋势

随着Spring Boot的逐渐成熟和广泛应用,其发展趋势也变得越来越明显。未来Spring Boot将继续朝着更加高效、便捷、安全、智能化等方向进行发展,并不断拓展应用场景和应用范围。

2 Spring Boot的优缺点评价

Spring Boot的优点主要包括:

  • 提供了极其简单的应用程序开发和部署方式。
  • 集成了众多的Spring生态系统组件,降低了开发难度和依赖冲突。
  • 易于实现自动化配置和自定义配置。
  • 提供了完善的测试和调试工具。

Spring Boot的缺点主要包括:

  • 不适合大型企业级应用程序的复杂需求。
  • 由于自动化配置的潜在风险,一些定制化开发需求无法很好地实现。
目录
相关文章
|
1月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
42 2
|
5月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
2月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
43 1
Spring MVC——项目创建和建立请求连接
|
2月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
172 1
Maven——创建 Spring Boot项目
|
2月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
48 1
如何使用 maven 创建一个 Spring Boot项目
|
2月前
|
Java 应用服务中间件 Android开发
Eclipse创建Spring项目
本文介绍了在Eclipse中创建Spring项目的步骤,包括如何配置Tomcat服务器、创建项目、部署项目到Tomcat以及添加Spring框架所需的JAR包。
84 1
Eclipse创建Spring项目
|
2月前
|
Java Spring
ij社区版如何创建spring项目
如何在IntelliJ IDEA社区版中创建Spring项目,包括安装Spring Boot Helper插件的步骤和创建过程。
85 1
ij社区版如何创建spring项目
|
2月前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
2月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
64 2
|
2月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
226 2