SpringBoot详解

       前言

        之前做过一次SpringBoot的入门博客,这次主要在之前的基础上进行一个深入了解下SpringBoot。


微服务

        微服务是一种架构风格,一个大型的复杂项目,由一个或多个小型服务组成。系统中的各个小型服务可以独立部署,松耦合,并且这些小型服务之间以轻量级的通信协作(http)作为基础进行通信,这样的微服务器架构独立性更强、粒度更细、性能更高、安全性、可扩展性、可重用性都更高。

        传统的项目架构是由浏览器发送请求、不管是任何请求都是直接发送到一个部署的项目当中,然后进行相关的操作并通过一个数据库返回参数。如果在一个项目中其中的一个功能出现问题整个项目可能会面临崩溃。亦或者一个项目中的功能模块很多,如:用户、订单、产品,而用户的功能模块访问量太大其他的访问量却很少,但仅仅是为了防止用户的功能模块因为使用量过多而出现服务器瘫痪或,延迟卡顿,需要扩建服务器。但是扩建的服务器上其他的功能模块却没有任何使用。很显然就等于浪费了很多资源了。

        微服务的项目架构与传统的项目不同之处就是:每一个模块为一个项目、每一个项目有独立的服务器、独立的数据库。相互使用通信协作(HTTP)进行通信关联。即使其中有一个模块项目崩溃也不会影响到其他的项目。如果用户服务访问量太大,需要横向扩展,只需针对用户服务增加服务器数量,扩展集群,其它服务也不受影响。

upload successful

注意:并不是用了 Spring Boot 就表示实现了微服务架构,Spring Boot只是让我们更加方便地构建项目,真正的微服务需要架构上的支持。即使使用普通的框架也能搭建出微服务架构。


SpringBoot

         Pivotal(原 Spring 团队)公司开发的框架,采用“规约大于配置”的原则,整合其他以 Spring 为核心的框架集,是框架的框架。

  • SpringBoot的四大好处

    • 让编码更简单

      SpringBoot封装了Spring以及相关的框架,并将相关的依赖分类打包成了 44 个应用 starter、1 个产品 starter、6 个替代性技术 starter。每个 starter 是相关 jar 包的集合,自动引入。

    • 让配置更简单

      SpringBoot配置参数只需要通过一个或多个application.properties文件即可。而且不需要编写多余的XML文件减少了很多代码量编写。

    • 让部署更简单

      随着 DevOps 的普及,软件的开发阶段和运维阶段的联系越来越紧密,开发要为运维服务,运维要为开发支撑。目前行业内采用 Docker 等容器进行虚拟化的部署。采用SpringBoot 的项目(即使是 web 项目)打包后只有一个 jar 包,非常 方便云上部署。

    • 让监控更简单

      基于 SpringBoot 开发的软件自带监控接口,非常方便运维和开发人员在线诊断。

  • SpringBoot代码结构

        SpringBoot有一个主类(启动类)。SpringBoot入口启动、@SpringBootApplication注解往往放在你的主类。SpringBoot最好按照Java规范定义package。否则的话可能会出现一系列问题。@SpringBootApplication注释的主类必须与其他package同级存在。

upload successful

  • 主应用程序类

        被@SpringBootApplication注释的类,就是整个SpringBoot的主类。它隐含地定义为某些项目一基地“搜索包”。如果不想使用@SpringBootApplication,它导入的@EnableAutoConfiguration 和@ComponentScan注释会定义该行为,因此也可以使用它。

upload successful

upload successful

  • 自动配置

    SpringBoot 能简化配置,很大原因是遵循“约定大于配置”的思想。Spring Boot自动配置尝试根据添加的jar依赖项自动配置Spring应用程序。@EnableAutoConfiguration 的注解,表示你希望 SpringBoot 开启自动配置功能。@EnableAutoConfiguration 不仅支持 SpringBoot 官方的 starter,还支持第三方常用的一些 jar。

    打开 SpringBoot 自动配置的 jar 包中 spring.factories 文件可以看到默认支持自动配置的框架、类库等。使用了@EnableAutoConfiguration 注解后,等于打开了 SpringBoot“ “的 按依赖的 jar 帮你自置 动配置 Bean ”的开关。如果自己开发的 jar 需要自动配置,只需在你的项目的 META-INF 目录也提供一个 spring.factories 文件,参考官方配置即可。

  • 集成开关

        SpringBoot 对其它框架、类库、中间件的支持,提供了一系列名为@Enable系列的注解。建议采用@Enable*系列的注解来开启某方面的功能。

upload successful

  • 自定义 Bean

        通过在类上添加@Configuration注解标识一个类是配置类。等价于一个Spring.xml配置文件

upload successful

        如果觉得这样在 Java 代码中把配置硬编码不利于维护,也可以把配置放在application.properties 中,需要利用 Spring 的 Environment 类来注入。

upload successful

upload successful

        如果自定义 Bean 的类代码是自己写的,可以在类中用@Value 注解直接指定配
置的 key,从 properties 文件注入更方便:

upload successful

        如果你用@Configuration 注解把配置写在不同的类中,可以使用@Import 注解
导入这些类,或者使用@ComponentScan 注解扫描进来:

upload successful

        SpringBoot 仍然支持基于 XML 的配置方式,但是 不推荐使用,除非情况特殊。可以使用@Configuration 和@ImportResource 注解导入xml配置文件

upload successful


SpringBoot快速搭建

        使用Idea开发工具中创建项目中选择Spring Initializr项目。这个项目封装了SpringBoot模板,通过
Default指定的路径访问到Spring官网进行下载模板。

upload successful

过程与之前所发布的初识SpringBoot相同。

  • 配置属性文件

        在SpringBoot项目的配置文件中常用的的配置文件格式有.properties、.yaml(yml)。xml文件也是可以支持但在SpringBoot中并不怎么使用。

  • 在yml配置文件中自定义Bean注入参数

    在配置文件中为Bean属性注入值。

upload successful
upload successful

然后在SpringBootTest测试类中执行以下代码,通过IOC控制反转从Bean中得到相应的参数。

upload successful

  • 在properties配置文件中使用@Value注解自定义Bean注入参数

    在application.properties文件中添加我们自定义的属性:

upload successful

在HelloController中使用@Value注解注入参数

upload successful

upload successful
如果在使用注入Bean时出现以下错误:Could not resolve placeholder ‘’ in value “${}”可能是应为你的配置文件并没有被编译成功。解决方案:在pom文件中编写以下代码将同名后缀的配置文件进行强制编译

upload successful