当前位置:   article > 正文

【SpringBoot新手篇】Spring Boot 简介

spring boot

Spring Boot 简介

概述

随着动态语言的流行 (RubyGroovyScalaNode.js),Java 的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。

在上述环境下,Spring Boot 应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速的运行起来。使用 Spring Boot 很容易创建一个独立运行(运行 Jar,内嵌 Servlet 容器)准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需很少的 Spring 配置。

Spring Boot 优缺点

优点

  • 快速构建项目
  • 对主流开发框架的无配置集成
  • 项目可独立运行,无需外部依赖 Servlet 容器
  • 提供运行时的应用监控
  • 极大地提高了开发、部署效率
  • 与云计算的天然集成

缺点

  • 版本迭代速度很快,一些模块改动很大
  • 由于不用自己做配置,报错时很难定位
  • 网上现成的解决方案比较少

第一个 Spring Boot 应用程序

概述

这里我们使用 Intellij IDEA 2018来新建一个 Spring Boot 项目

打开 IDEA -> New Project -> Spring Initializr

填写项目信息

选择 Spring Boot 版本及 Web 开发所需的依赖

保存项目到指定目录

工程目录结构

创建完成后的工程目录结构如下:

  • .gitignore:Git 过滤配置文件
  • pom.xml:Maven 的依赖管理配置文件
  • HelloSpringBootApplication.java:程序入口
  • resources:资源文件目录
    • static: 静态资源文件目录
    • templates:模板资源文件目录
    • application.properties:Spring Boot 的配置文件,实际开发中会替换成 YAML 语言配置(application.yml)

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zysheep</groupId>
    <artifactId>hello-spring-boot</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>hello-spring-boot</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
        <!--
            在工作中,很多情况下我们打包是不想执行测试用例的
            可能是测试用例不完事,或是测试用例会影响数据库数据
            跳过测试用例执
            -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
                    <!--跳过项目运行测试用例-->
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • parent:继承了 Spring BootParent,表示我们是一个 Spring Boot 工程
  • spring-boot-starter-web:包含了 spring-boot-starter 还自动帮我们开启了 Web 支持

功能演示

我们只需要在HelloSpringBootApplication类上添加@RestController注解,添加方法:

@RequestMapping(value = "", method = RequestMethod.GET)
public String sayHello() {
    return "Hello Spring Boot";
}
  • 1
  • 2
  • 3
  • 4

启动 HelloSpringBootApplicationmain() 方法,浏览器访问 http://localhost:8080 可以看到:

神奇之处

  • 没有配置 web.xml
  • 没有配置 application.xml,Spring Boot 帮你配置了
  • 没有配置 application-mvc.xml,Spring Boot 帮你配置了
  • 没有配置 Tomcat,Spring Boot 内嵌了 Tomcat 容器

Spring Boot 单元测试

import static org.hamcrest.CoreMatchers.equalTo;                                        
import static org.junit.Assert.assertThat;                                                                                                                                       
@SpringBootTest
public class HelloSpringBootApplicationTests {                                                                                                                                                     
    @LocalServerPort                                                                                 
    private int port;                                                                                
                                                                                                     
    private URL base;                                                                                
                                                                                                     
    @Autowired                                                                                       
    private TestRestTemplate template;                                                               
                                                                                                     
    @Before                                                                                          
    public void setUp() throws Exception {                                                           
        this.base = new URL("http://localhost:" + port + "/");                                       
    }                                                                                                
                                                                                                     
                                                                                                     
                                                                                             
    @Test                                                                                            
    public void test1()  {                                                                           
        ResponseEntity<String> response = template.getForEntity(base.toString(), String.class);      
        assertThat(response.getBody(), equalTo("Hello Spring Boot"));                                
    }                                                                                                
                                                                                                     
                                                                                                     
}                                                                                                    
                                                                                                     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Spring Boot 常用配置

自定义 Banner

Spring Boot 启动的时候会有一个默认的启动图案

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

我们在 src/main/resources 目录下新建一个 banner.txt

通过 http://patorjk.com/software/taag 网站生成字符串,将网站生成的字符复制到 banner.txt

再次运行这个程序

${AnsiColor.BRIGHT_RED}

//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                  //

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

常用属性设置:

  • ${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色
  • ${application.version}:用来获取 MANIFEST.MF 文件中的版本号
  • ${application.formatted-version}:格式化后的 ${application.version} 版本信息
  • ${spring-boot.version}Spring Boot 的版本号
  • ${spring-boot.formatted-version}:格式化后的 ${spring-boot.version} 版本信息

配置文件

Spring Boot 项目使用一个全局的配置文件 application.properties 或者是 application.yml,在 resources 目录下或者类路径下的 /config 下,一般我们放到 resources 下。

修改 Tomcat的端口为 9090,并将默认的访问路径 “/” 修改为 "boot",可以在 application.yml 中添加:

server:
  port: 9090
  servlet:
    context-path: /boot
  • 1
  • 2
  • 3
  • 4

Starter POM

Spring Boot 为我们提供了简化企业级开发绝大多数场景的 starter pom ,只要使用了应用场景所需要的 starter pom ,相关的技术配置将会消除,就可以得到 Spring Boot 为我们提供的自动配置的 Bean

日志配置

Spring Boot 对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置

默认情况下,Spring Boot 使用 Logback 作为日志框架

logging:
  file: logs/spring-boot-hello.log
  level.org.springframework.web: DEBUG
  • 1
  • 2
  • 3

关闭特定的自动配置

关闭特定的自动配置使用 @SpringBootApplication 注解的 exclude 参数即可,这里以关闭数据源的自动配置为例

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
  • 1

整合junit单元测试

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
// OrderApplication.class启动类
@SpringBootTest(classes = OrderApplication.class)
public class OrderApplicationTest {
    
    @Autowired
    private UserClient userClient;

    @Test
    public void testGzip() {
        String s = userClient.testGzip();
        System.out.println(s.length());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

与启动类相同目录创建测试类,则不需要在@SpringBootTest注解中指定启动类
在这里插入图片描述

访问webApp下html/jsp

springboot项目默认情况下"/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射。用以前的方式再webApp中访问静态资源。

静态资源的文件夹:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/

html

resources同级目录新建webapp目录,设置webapp资源相对路径
在这里插入图片描述
在这里插入图片描述
可以再webapp下新建多个目录文件,访问可需要添加对应目录。如:访问update.html,浏览器访问 http://localhost:8080/user/update.html

jsp

1、添加对jsp依赖的支持。

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、添加前缀和后缀

spring:
  resources: #静态资源
    static-locations:
      - classpath:/META-INF/resources/
      - classpath:/resources/
      - classpath:/static/
      - classpath:/public/
      - classpath:/img/
      - classpath:/js/
  mvc:
    view:
      prefix: /
      suffix: .jsp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

SpringBoot部署War包

SpringBoot 项目开发完毕后,支持两种方式部署到服务器:

  • jar包(官方推荐)
  • war包

更改pom文件中的打包方式为war

<packaging>war</packaging>
  • 1

修改启动类

@SpringBootApplication
public class SpringbootDeployApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDeployApplication.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootDeployApplication.class);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

添加打包插件和指定jar包名称

<build>
     <finalName>springboot</finalName>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
     </plugins>
 </build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/575977
推荐阅读
相关标签
  

闽ICP备14008679号