0


SpringBoot 简单开发流程(详解)

一,简介

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

    Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它, 开发人员可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功 夫,甚至完全不用配置。实际上,Spring Boot的一项重要工作就是让Spring配置不再成为开发路上的绊脚石。

    spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装。所以,以前可以用spring做的事情,现在用spring boot都可以做。

    现在流行微服务与分布式系统,Spring boot就是一个非常好的微服务开发框架,可以使用它快速的搭建起一个系统。同时,你也可以使用spring Cloud(Spring Cloud是一个基于Spring Boot实现的云应用开发工具)来搭建一个分布式的网站。

二,SpringBoot的优点

   ** 使编码变得简单**

** **SpringBoot采用Java config的方式,对Spring进行配置,并且提供了大量的注解,极大地提高了工作效率。

    **使配置变得简单**

** **spring boot提供许多默认配置,当然也提供自定义配置。但是所有spring boot的项目都只有一个配置文件:application.properties/application.yml。用了spring boot,再也不用担心配置出错找不到问题所在了。

     **使部署变得简单**

** **spring boot内置了三种servlet容器:tomcat,jetty,undertow

**名称 **

*Servlet***版本 **

Java****版本

**Tomcat 8 **

3.1

Java 7+

**Tomcat 7 **

3

Java 6+

**Jetty 9 **

3.1

Java 7+

**Jetty 8 **

3

Java 6+

**Undertow 1.1 **

3.1

Java 7+

            所以,只需要一个Java的运行环境就可以运行SpringBoot的项目了。SpringBoot的项目可以打成一个jar包,然后通过java -jar xxx.jar来运行。(SpringBoot项目的入口是一个main方法,运行该方法即可)

            也可以将Spring Boot应用部署到任何兼容Servlet 3.0+的容器。

** 使监控变得简单**

** **SpringBoot提供了actuator包,可以使用它来对应用进行监控。

三,微服务架构

    微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

    例如要开发一个购票系统。就可以简单的拆分为用户管理微服务和售票系统微服务。两个服务都可以独立运行,都有自己的数据库,他们之间通过HTTP API 进行通信。

    而SpringBoot就是搭建微服务的一个很好的选择。

    微服务一般都是运行在分布式环境中的,这可不是简单的写一个SSM框架的小程序就可以解决的,其中需要用到很多技术,比如负载均衡,反向代理,服务治理,配置管理,消息总线等,SpringCloud提供了这些技术。并且,SpringCloud生态是基于spring boot的。

四,SpringBoot的创建,使用

    可以像使用其他任何标准Java库那样使用SpringBoot,只需简单地在classpath下包含正确的 spring-boot-*.jar 文件。 SpringBoot不需要集成任何特殊的工具, 所以可以使用任何IDE或文本编辑器;Spring Boot应用也没有什么特殊之处, 所以可以像任何其他Java程序那样运行和调试。

    尽管可以拷贝SpringBoot jars, 不过,通常推荐使用一个支持依赖管理的构建工具(比如Maven或Gradle)或者内嵌依赖管理工具的IDE,如Spring的官方IDE-STS。

项目创建

可以选择打包方式

             可以选择需要的依赖

    **完成项目创建后添加为Maven项目**

** **首先设置Maven的路径

             将项目创建为Maven管理项目

     **配置.pom文件添加起步依赖**
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--MybatisSpring整合-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <!-- Springboot 外部的Tomcat支持  没有这个,不能访问jsp页面-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <!-- 数据库支持 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>

        <!-- 数据库连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.13</version>
        </dependency>

        <!-- 1.日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!--热部署的支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>

** 项目基本创建完成**

项目的配置

   ** .yml文件的配置**

    包括项目端口设置,项目路径设置,视图解析器,数据库连接池的配置,mybatis的配置。

五,SpringBoot的启动和退出相关

启动

    SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。 在很多情况下, 只需委托给SpringApplication.run这个静态方法:
package com.eeerosss;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootStartApplication {

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

}
    通过在classpath下添加一个banner.txt或设置banner.location来指定相应的文件可以改变启动过程中打印的banner(即启动时正常日志前拼接出来的Spring部分)。 如果这个文件有特殊的编码, 可以使用banner.encoding设置它(默认为UTF-8) 。

名称

描述

${application.version}

MANIFEST.MF中声明的应用版本号, 例如1.0

${application.formattedversion}

MANIFEST.MF中声明的被格式化后的应用版本号(被括号包裹

且以v作为缀) , 用于显示, 例如(v1.0)

${spring-boot.version}

正在使用的Spring Boot版本号, 例如1.5.0.BUILD-SNAPSHOT

${spring-boot.formatted-version}

正在使用的Spring Boot被格式化后的版本号(被括号包裹且以

v作为缀) , 用于显示, 例如(v1.5.0.BUILD-SNAPSHOT)

            在banner.txt配置

             展示出springboot的版本

退出

    每个SpringApplication在退出时为了确保ApplicationContext被优雅的关闭, 将会注册一个JVM的shutdown钩子。 所有标准的Spring生命周期回调(比如,DisposableBean接口或@PreDestroy注解)都能使用。

    如果beans想在应用结束时返回一个特定的退出码(exit code) , 可以实现org.springframework.boot.ExitCodeGenerator接口

六,属性注入

    Spring Boot在程序中允许使用外部的配置文件获取配置信息, 这样就能够在不同的环境下使用相同的代码。 

    外部配置支持使用properties文件,YAML文件, 环境变量和命令行参数。

    使用@Value注解, 可以直接将属性值注入到beans中。

    **Spring Boot使用一个非常特别的PropertySource次序来允许对值进行合理的覆盖, 需要以下面的次序考虑属性:**

** **1. 命令行参数

            2. 来自于java:comp/env的JNDI属性 

            3. Java系统属性(System.getProperties()) 

            4. 操作系统环境变量 

            5. 只有在random.*里包含的属性会产生一个RandomValuePropertySource 

            6. 在打包的jar外的应用程序配置文件(application.properties, 包含YAML和profile变量) 

            7. 在打包的jar内的应用程序配置文件(application.properties, 包含YAML和profile变量) 

            8. 在@Configuration类上的@PropertySource注解 

            9. 默认属性(使用SpringApplication.setDefaultProperties指定)

** 简单案例**

#管理监控端口
management.server.port=9999
#设置端口
server.port=1234
info.app.name=springboot
info.app.description=springboot-start
info.app.version=1.0

name=zhangSan
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.less.then.ten=${random.int(10)}
my.number.in.range=${random.int[1024,2048]}

app.name=zhangSi
app.info=${app.name}'s info  
    对应实体类属性 
 /**
     * 名字
     */
    @Value("${name}")
    private String name;
    /**
     * 随机字符串
     */
    @Value("${my.secret}")
    private String secret;
    /**
     * 随机整数
     */
    @Value("${my.number}")
    private int number;
    /**
     * 随机长整数
     */
    @Value("${my.bignumber}")
    private  long bignumber;
    /**
     * 十以内随机整数
     */
    @Value("${my.number.less.then.ten}")
    private String numberLessThenTen;
    /**
     * 范围内整数
     */
    @Value("${my.number.in.range}")
    private int numIntRange;
    @Value("app.name")
    private String name2;
    @Value("${app.info}")
    private String info;
    可以像上述示例一样将application.properties文件打包到jar文件内, 用来提供一个合理的默认name属性值。 当运行在生产环境时, 可以在 jar外提供一个application.properties文件来覆盖name属性。

    对于一次性的测试, 还可以使用特定的命令行开关启动(比如, java -jar app.jar --name="Spring")

    默认情况下, SpringApplication将任何可选的命令行参数(以'--'开头, 比如, --server.port=9000) 转化为property,并将其添加到Spring Environment中。

    命令行属性总是优先于其他属性源。

    如果不想将命令行属性添加到Environment里,则可以使用SpringApplication.setAddCommandLineProperties(false)来禁止它们。

    SpringApplication将从以下位置加载application.properties文件, 并把它们添加到Spring环境上下文中:

    当前目录下的/config子目录

    当前目录

    classpath下的/config包

    classpath根路径(项目root)

    这个列表是按优先级排序的(列表中位置高的将覆盖位置低的),同时也可以使用YAML文件替代properties文件。

    如果不希望使用默认的application.properties作为配置文件名,可以通过指定spring.config.name环境属性来切换其他的名称。 也可以使用spring.config.location环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分割) :
java -jar myproject.jar --spring.config.name=myproject
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
    如果spring.config.location包含目录(相对于文件) , 那它们应该以/结尾(在加载前, spring.config.name产生的名称将被追加到后面) 。不管spring.config.location是什么值,默认的搜索路径classpath:,classpath:/config,file:,file:config/总会被使用。

    以这种方式, 可以在application.properties中为应用设置默认值, 然后在运行的时候使用不同的文件覆盖它,同时保留默认配置。

    如果使用环境变量而不是系统配置,大多数操作系统不允许以点分割的key名称, 在这种情况下可以使用下划线代替(比如, 使用SPRING_CONFIG_NAME代替spring.config.name)。 如果应用运行在一个容器中,那么JNDI属性(java:comp/env)或servlet上下文初始化参数可以用来取代环境变量或系统属性, 当然也可以使用环境变量或系统属性。

    当application.properties里的值被使用时,它们会被存在的环境过滤, 所以能够引用先前定义的值(如系统属性):
app.name=zhangSi
app.info=${app.name}'s info  

七,SpringBootProfile

    在项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以可能会在上线的时候手工修改这些配置信息。但是Spring中提供了Profile功能。只需要在启动的时候添加一个虚拟机参数,激活环境所要用的Profile就可以了。

    除了application.properties文件, 特定配置属性也能通过Profile配置文件application-{profile}.properties来定义。 特定Profile属性跟标准application.properties相同的路径加载, 并且特定profile文件会覆盖默认的配置。
     创建一个bean,用来测试是不是从不同的配置文件中取的值(代码中使用了统一的属性注入注解,也可以使用Value逐一对每个属性进行注入)

    在项目的classpath中创建两个profile对应的配置文件:

    application-dev.properties:
profile.test.userName=zhangSan
profile.test.passWord=123456
    application-prod.properties:
profile.test.userName=liSi
profile.test.passWord=654321
    对应实体类
package com.eeerosss.profile;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author : Eeerosss
 * @create 2022/9/23 14:55
 */
@Component
@ConfigurationProperties("profile.test")
public class ProfileDomain {
    private String userName;
    private String passWord;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}
    在Eenironment variables中设置要调用的配置文件

    开发环境:spring.profiles.active=dev

    生产环境:spring.profiles.active=prod

    **有时候可能还会有这样的需求:生产环境或者开发环境我们所看到的功能是不同的,也需要我们根据配置项来激活不同的功能,这种情况下,先定义一个Service的接口:**
  public String getProfileDomain();
    **提供两种Profile的实现:**

** **运行环境

@Service
@Profile("dev")
public class ProfileDevServiceImpl implements ProfileService {
    @Override
    public String getProfileDomain() {
        StringBuffer buffer = new StringBuffer("我是运行环境,我吃:");
        buffer.append("米饭");
        return buffer.toString();
    }
}
            生产环境
@Service
@Profile("pro")
public class ProfileProServiceImpl implements ProfileService {
    @Override
    public String getProfileDomain() {
        StringBuffer buffer = new StringBuffer("我是生产环境,我吃:");
        buffer.append("肉");
        return buffer.toString();
    }
}
            编写控制器查看使用的环境
@RestController
public class IndexController {
    @Autowired
    ProfileService profileService;

 
    @RequestMapping("/serviceinfo")
    public  String serviceInfo(){
        return profileService.getProfileDomain();
    }
}
            编写启动类 
@SpringBootApplication
public class SpringbootProfileApplication implements CommandLineRunner {
    @Autowired
    ProfileService profileService;
    public static void main(String[] args) {
        SpringApplication.run(SpringbootProfileApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(profileService.getProfileDomain());
    }
}
            运行结果 

八,YAML配置

    可以使用YAML文件代替properties文件作为项目配置。

    YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。

    将SnakeYAML库放到classpath下,Spring Boot都会自动支持YAML作为properties的替换。

    如果你使用starter POMs,spring-boot-starter会自动提供SnakeYAML,这就意味着在绝大部分情况下YAML的支持都是默认提供的。

    对于较复杂的数据结构来说,YAML远远优于properties。

    在处理层级关系的时候,properties需要使用大量的路径来描述层级(或者属性),比如environments.dev.url和environments.dev.name。其次,对于较为复杂的结构,比如数组,写起来更为复杂。而对应的YAML格式文件就简单很多

    YAML使用冒号加缩进的方式代表层级(属性)关系,使用短横杠(-)代表数组元素。

   ** YAML中允许表示三种格式,分别是常量值,对象和数组:**

    和properties相同,使用#作为注释,YAML中只有行注释

   ** YAML文件基本格式要求: **

** ** YAML大小写敏感;

            使用缩进代表层级关系;

            缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)

** 对象**

** **使用冒号代表,格式为key: value。冒号后面要加一个空格:

            可以使用缩进表示层级关系:![](https://img-blog.csdnimg.cn/6bf4edad5eef4f12b8965300201fc5fa.png) 

             YAML中还支持流式(flow)语法表示对象,比如上面例子可以写为:![](https://img-blog.csdnimg.cn/c397abcd68084ef19c26764e0d958e4e.png)

            较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value:![](https://img-blog.csdnimg.cn/733d615c7a5b4b9b8ce0e24e6949fd75.png) 

            意思即对象的属性是一个数组[complexkey1,complexkey2],对应的值也是一个数组[complexvalue1,complexvalue2]

            使用一个短横线加一个空格代表一个数组项:

            也可以有这样的写法(可以简单理解为:[[Java,LOL]]): 

            一个相对复杂的例子:

            数组也可以使用流式(flow)的方式表示:

            YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。下面使用一个例子来快速了解常量的基本使用:

            多个YAML配配置可以在同一个文件中,使用---表示一个文档的开始;比如Springboot中profile的定义:

            上例代表定义了两个profile,一个是development,一个production 

    **Spring框架提供两个便利的类用于加载YAML文档,YamlPropertiesFactoryBean会将YAML作为Properties来加载,YamlMapFactoryBean会将YAML作为Map来加载。**![](https://img-blog.csdnimg.cn/5514eafd74274e2b9257d089deadfc3a.png)

    YAML列表被表示成使用[index]间接引用作为属性keys的形式, 例如下面的YAML: ![](https://img-blog.csdnimg.cn/73150e1dda044e7da8cf9be925ab7edf.png)

    将会转化到下面的属性中: 

    使用前例用过的@ConfigurationProperties注入列表属性,需要确定目标bean中有个java.util.List或Set类型的属性, 并且需要提供一个setter或使用可变的值初始化它, 比如,下面的代码将绑定上面的属性: 

    可以在单个文件中定义多个特定Profile配置的YAML文档, 并通过一个spring.profiles key标示应用的文档。 例如:![](https://img-blog.csdnimg.cn/fed25d8b974f45c8a82c01e900a07a58.png) 

    正如前例中看到的,使用@Value(“${property}”)注解注入配置属性有时可能比较笨重, 特别是需要使用多个properties或数据本身有层次结构。 为了控制和校验应用配置, Spring Boot提供一个允许强类型beans的替代方法来使用properties:

可以通过在@EnableConfigurationProperties注解中直接简单的列出属性类来快捷的注册@ConfigurationProperties bean的定义:

    Spring Boot使用一些宽松的规则用于绑定Environment属性到@ConfigurationProperties beans, 所以Environment属性名和bean属性名不需要精确匹配。 常见的示例中有用的包括虚线分割(如context--path绑定到contextPath) 和将环境属性转为大写字母(比如,PORT绑定port)。![](https://img-blog.csdnimg.cn/e0506f6ba89e4abaa6e1317cee0e27e3.png) 下面的属性名都能用于上面的@ConfigurationProperties类:

属性

说明

person.firstName

标准驼峰命名规则

person.first-name

虚线表示, 推荐用于.properties和.yml文件中

PERSON_FIRST_NAME

大写形式, 使用系统环境变量时推荐

九,web相关

** **Spring Boot非常适合开发web应用程序。 可以使用内嵌的Tomcat, Jetty或Undertow轻轻松松地创建一个HTTP服务器。 大多数的web应用都使用spring-boot-starter-web模块进行快速搭建和运行。

    Spring Web MVC框架(通常简称为“Spring MVC”) 是一个“模型, 视图, 控制器”的web框架。 Spring MVC允许创建特定的@Controller或@RestController beans来处理传入的HTTP请求。 使用@RequestMapping注解可以将控制器中的方法映射到相应的HTTP请求。

    **Spring Boot为Spring MVC提供适用于多数应用的自动配置功能。 在Spring默认基础上, 自动配置添加了以下特性:**

** **引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。

    对静态资源的支持, 包括对WebJars的支持。

    自动注册Converter, GenericConverter, Formatter beans。

    对HttpMessageConverters的支持。

    自动注册MessageCodeResolver。

    对静态index.html的支持。

    对自定义Favicon的支持。

    如果想全面控制Spring MVC, 可以添加自己的@Configuration, 并使用@EnableWebMvc对其注解。 如果想保留Spring Boot MVC的特性, 并只是添加其他的MVC配置(拦截器, formatters, 视图控制器等), 可以添加自己的WebMvcConfigurerAdapter类型的@Bean(不使用@EnableWebMvc注解) 。

    **Spring MVC使用HttpMessageConverter接口转换HTTP请求和响应。 合理的缺省值被包含的恰到好处, 例如:**

** ** 对象可以自动转换为JSON(使用Jackson库) 或XML(如果Jackson XML扩展可用则使用它, 否则使用JAXB)

    字符串默认使用UTF-8编码

    **如果需要添加或自定义转换器, 可以使用Spring Boot的HttpMessageConverters类: **

    任何在上下文中出现的HttpMessageConverter bean将会添加到converters列表, 可以通过这种方式覆盖默认的转换器(converters) 。 

    **默认情况下, Spring Boot从classpath下一个叫/static(/public, /resources或/META-INF/resources) 的文件夹或从ServletContext根目录提供静态内容。 这使用了Spring MVC的ResourceHttpRequestHandler, 所以可以通过添加自己的WebMvcConfigurerAdapter并覆写addResourceHandlers方法来改变这个行为(加载静态文件) 。**

** 在一个单独的web应用中, 容器默认的servlet是开启的, 如果Spring决定不处理某些请求, 默认的servlet作为一个回退(降级) 将从ServletContext根目录加载内容。 大多数时候, 这不会发生(除非修改默认的MVC配置) , 因为Spring总能够通过DispatcherServlet处理请求。**

** 此外, 上述标准的静态资源位置有个例外情况是Webjars内容。 任何在/webjars/路径下的资源都将从jar文件中提供, 只要它们以Webjars的格式打包。

** 注:如果应用将被打包成jar, 那就不要使用src/main/webapp文件夹。 尽管该文件夹是一个共同的标准, 但它仅在打包成war的情况下起作用, 并且如果产生一个jar, 多数构建工具都会静悄悄的忽略它。**

** 可以使用Spring MVC提供动态HTML内容。**

** **Spring MVC支持各种各样的模板技术, 包括Velocity,FreeMarker和JSPs。 很多其他的模板引擎也提供它们自己的Spring MVC集成Spring Boot为以下的模板引擎提供自动配置支持:

    FreeMarker

    Groovy

    Thymeleaf

    Velocity

    如果可能的话, 应该忽略JSPs, 因为在内嵌的servlet容器使用它们时存在一些已知的限制。 当你使用这些引擎的任何一种, 并采用默认的配置, 模板将会从src/main/resources/templates目录下自动加载。

    **如果要使用JSP,那么需要在项目的POM文件中加入如下依赖:**
<dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    **Spring Boot默认提供一个/error映射用来以合适的方式处理所有的错误, 并且它在servlet容器中注册了一个全局的 错误页面。 对于机器客户端(相对于浏览器而言, 浏览器偏重于人的行为) , 它会产生一个具有详细错误, HTTP状态, 异常信息的JSON响应。 对于浏览器客户端, 它会产生一个白色标签样式(whitelabel) 的错误视图, 该视图将以HTML格式显示同样的数据(可以添加一个解析为erro的View来自定义它) 。 为了完全替换默认的行为, 你可以实现ErrorController, 并注册一个该类型的bean定义, 或简单地添加一个ErrorAttributes类型的bean以使用现存的机制, 只是替换显示的内容。如果在某些条件下需要比较多的错误页面, 内嵌的servlet容器提供了一个统一的Java DSL(领域特定语言) 来自定义错误处理。**
@Controller
public class ErrorPageController implements ErrorController {

    Logger logger = Logger.getLogger(ErrorPageController.class);

    public static final String ERROR_PATH = "/error";

    @RequestMapping(ERROR_PATH)
    public String error(){
        logger.info("进入了错误页面的控制器当中...");
        return "error404";
    }

    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }
}
    也可以使用常规的Spring MVC特性来处理错误, 比如@ExceptionHandler方法和@ControllerAdvice。 ErrorController将会捕获任何没有处理的异常

十,常用注解汇总

   ** @SpringBootApplication**

** ** 包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。

    **@ResponseBody**

** ** 表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。

   ** @RequestMapping**

** **提供路由信息,负责URL到Controller中的具体函数的映射。

   ** @ComponentScan**

** **组件扫描,可自动发现和装配一些Bean,@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中如@Controller,@Service,@Repository注解中有一个共同的注解@Component,@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中

** @Configuration**

** **等同于spring的XML配置文件;使用Java代码可以检查类型安全。

** @EnableAutoConfiguration**

** **自动配置

** @Controller**

** ** 用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。

  **  @RestController**

            @Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。

    **@Autowired**

            自动导入

 **   @PathVariable**

            获取参数。等同于spring的XML配置文件;使用Java代码可以检查类型安全。

   ** @ImportResource**

            注解加载xml配置文件

   ** @Import**

            用来导入其他配置类。

   ** @Repository**

            使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

    **@Bean**

            用@Bean标注方法等价于XML中配置的bean

   **  @Value**

            注入Spring boot application.properties配置的属性的值。

    ** @Qualifier**

            当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者。

  **  Spring Boot为Spring MVC提供适用于多数应用的自动配置功能。 在Spring默认基础上, 自动配置添加了以下特性:引入ContentNegotiatingViewResolver和BeanNameViewResolver beans,对静态资源的支持, 包括对WebJars的支持,自动注册Converter, GenericConverter, Formatter beans,对HttpMessageConverters的支持,自动注册MessageCodeResolver,对静态index.html的支持,对自定义Favicon的支持。**
标签: spring boot java spring

本文转载自: https://blog.csdn.net/weixin_62282158/article/details/127068007
版权归原作者 Eeerosss 所有, 如有侵权,请联系我们删除。

“SpringBoot 简单开发流程(详解)”的评论:

还没有评论