• 快速体验Spring Boot了解使用、运行和打包 | SpringBoot 2.7.2学习系列


    SpringBoot 2.7.2 学习系列,本节内容快速体验Spring Boot,带大家了解它的基本使用、运行和打包。

    Spring Boot 基于 Spring 框架,底层离不开 IoC、AoP 等核心思想。Spring 4.0 提供了基于 Java Config 的开发方式,Spring Boot 应运而生,可以简化 Spring 应用开发过程,同时也可以快速方便的集成第三方框架,如 MyBatis、Redis 等。

    0 版本说明

    1. 开发工具 IDEA 版本:2021.2
    2. Maven 版本: 3.6.3
    3. Spring Boot 版本:2.7.2
    4. JDK 版本:JDK 8
    5. MySQL 版本:MySQL 8

    说明,当前 Spring Boot 2.x 最新稳定版为 2.7.2 ,JDK 8 需要以上版本、Maven 需要 3.5 以上版本。(本想基于 Spring Boot 3.x,但 3.x 需要 Java 17,优雅哥电脑还只是 JDK 8)

    1 创建 Spring Boot 应用

    1.1 创建工程

    1)打开 idea,新建一个 Maven 项目,点击“Next”

    image-20220725222306684

    2)输入 Name、GroupId、ArtifactId,点击“Finish”

    image-20220725222537900

    1.2 设置 IDEA

    在 IDEA 的 Preferences 中设置 JDK、Maven

    1)设置 Maven

    image-20220725223111620

    2)设置 JDK

    image-20220725223300552

    在 Module Settings 中设置 JDK

    image-20220725223448668

    首先设置 SDKs:

    image-20220725223543208

    接着在 “Project” 中选择设置的 SDK

    image-20220725223646265

    最后在 “Modules” 中选择 Language Level:

    image-20220725223758470

    2 添加 Spring Boot 支持

    2.1 添加依赖

    1)在 pom.xml 中添加 Spring Boot 依赖。

    在烂大街的文章博客中,都是通过 parent 的方式继承 spring-boot-starter-parent,如下:

        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.2version>
        parent>
    

    这种方式几乎都用于在 demo 编写中,在大型项目或中大型企业中很少见到这么使用的。因为每个 module 只能有一个 parent ,而在企业开发中,微服务有多个服务,多个服务一般会继承自一个统一的 module,便于版本控制、通用功能等。如果在每个服务中都让spring-boot-starter-parent 占据了 parent 节点,那如何继承统一的 parent module 呢?

    或许有人会说,在 parent module 中继承 spring-boot-starter-parent。没错,确实可以这样。但除了服务,还会有一些公共模块(如对参数校验、通用响应、分布式 Redis 锁、Spring Doc等通用模块)也继承自这个parent module,这样一来,这些公共module也被迫添加了压根没有使用 spring boot starter 依赖。

    我的做法是通过 spring-boot-dependencies 来实现:

    1. properties 中定义 spring-boot-dependencies 版本号
    2. 在依赖管理 dependencyManagement 中,通过 pom 的方式、scope 为 import 添加 spring-boot-dependencies
    3. 在依赖dependencies中添加需要使用到的依赖。

    pom.xml 文件如下:

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <groupId>com.yygnb.demogroupId>
        <artifactId>hero-springboot-demoartifactId>
        <version>1.0-SNAPSHOTversion>
    
        <properties>
            <maven.compiler.source>8maven.compiler.source>
            <maven.compiler.target>8maven.compiler.target>
            
            <spring-boot-dependencies.version>2.7.2spring-boot-dependencies.version>
        properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
        dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-dependenciesartifactId>
                    <version>${spring-boot-dependencies.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
    
    project>
    
    折叠

    2.2 创建启动类

    创建启动类:com.yygnb.demo.DemoApplication

    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    3 测试运行

    3.1 添加测试Controller

    创建测试使用的 Controller:com.yygnb.demo.controller.DemoController

    @RestController
    @RequestMapping("demo")
    public class DemoController {
    
        @GetMapping("hello")
        public String hello(String msg) {
            String result = "Hello Spring Boot ! " + msg;
            System.out.println(result);
            return result;
        }
    }
    

    3.2 启动运行

    运行DemoApplication 中的 main 方法即可启动应用。控制台显示如下,则应用启动成功:

    image-20220726003230302

    在浏览器中访问:

    http://localhost:8080/demo/hello?msg=FirstTest

    页面上和控制台中都会显示:

    Hello Spring Boot ! FirstTest
    

    3.3 修改端口

    Spring Boot 默认运行的端口为 8080,如果要修改运行的端口号,需要修改配置实现。Spring Boot 支持三种格式的配置文件:xmlymlyaml,在项目中使用 yml格式较多。

    使用 yml 格式需要注意:

    1. 使用冒号分隔属性名和属性值
    2. 字符大小写敏感
    3. 层级之间缩进敏感(间隔两个空格)
    4. 属性值前面需要加一个空格
    

    Spring Boot 核心配置文件名为 application

    src/main/resources 中创建配置文件application.yml

    server:
      port: 9099
    

    该配置指定了服务运行的端口号为 9099,重启服务,将上面的访问路径中的8080修改为 9099 再次访问。

    4 打包

    Maven 工程打包是通过 mvn 命令进行的。在控制台中项目根目录下执行下列命令:

    mvn clean package
    

    执行该命令后,会在 target 目录下生成 hero-springboot-demo-1.0-SNAPSHOT.jar。查看该文件的大小,只有 4kb,这是因为直接打包仅仅会打包当前的代码,相关使用到的 spring boot 的依赖并不会包含进去,此时的 jar 文件是不能直接运行的。如果要让打包后的 jar 可以直接运行,需要在 pom.xml 中配置相关插件配置:

    4.1 配置插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>${spring-boot-dependencies.version}version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
    

    重新执行 mvn clean pacakge,会在 target 中生成两个文件:

    • hero-springboot-demo-1.0-SNAPSHOT.jar.original
    • hero-springboot-demo-1.0-SNAPSHOT.jar

    前者是打包的原始文件,和配置插件前一样,仅包含当前项目的代码。后者就包含了 spring boot 有关依赖,内置 Tomcat,可以直接运行。

    4.2 运行 jar

    可通过 java 命令执行上面打包生成的可执行文件。在控制台中执行:

    java -jar target/hero-springboot-demo-1.0-SNAPSHOT.jar
    

    命令执行后,依旧会启动服务。

    本文记录了另一种依赖 spring boot 的方式,下一篇集成MyBatis Plus实现增删改查。

    image

    今日优雅哥(youyacoder)学习结束,期待关注留言分享~~

  • 相关阅读:
    重新理解微服务之它还那么纯粹吗?
    什么是反向代理,反向代理是如何工作的?
    安卓手机抓包配置
    路由器和交换机之间的区别
    基于JavaSwing开发中国象棋对战游戏+实验报告 课程设计 大作业
    iNFTnews | web3将如何改变创作者经济?
    使用git命令修改分支名称
    C++_继承
    Mysql JSON 类型 索引&查询 操作
    go pprof 实战
  • 原文地址:https://www.cnblogs.com/youyacoder/p/16544627.html