Spring Boot学习笔记整理

Spring Boot学习

  • 1、Sring Boot与Spring Cloud
  • 2、Spring Boot入门
    • 2.1 运行环境
    • 2.2 手动创建Spring Boot的WEB项目
      • 2.2.1 创建maven项目添加依赖
      • 2.2.2 创建启动项
      • 2.2.3 Hello World
      • 2.2.4 运行main方法
      • 2.2.5 访问 localhost:8080/hello
    • 2.3 IDE创建Spring Boot项目
    • 2.4 部分注解介绍
      • 2.4.1 @RestController和 @RequestMapping
      • 2.4.2 @EnableAutoConfiguration
      • 2.4.3 @SpringBootApplication
      • 2.4.4 @SpringBootConfiguration
      • 2.4.5 @ComponentScan
      • 2.4.6 其他注解
    • 2.5 配置文件
      • 2.5.1 application.properties文件结构
      • 2.5.2 application.yml文件结构
      • 2.5.3 多环境配置
      • 2.5.4 Spring Boot配置大全

Spring Boot学习笔记整理_第1张图片

1、Sring Boot与Spring Cloud

二者都是Spring家族中的顶级项目

Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Boot,看名字就知道是Spring的引导,就是用于启动Spring的,使得Spring的学习和使用变得快速无痛。不仅适合替换原有的工程结构,更适合微服务开发。

Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。

Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot来实现。


学过Spring的都知道,Spring开发有非常头疼的三点:

以启动一个带Hibernate的Spring MVC为例。
1. 依赖太多,而且要注意版本兼容。这个应用,要添加10-20个依赖,Spring相关的包10多个,然后是Hibernate包,Spring与Hibernate整合包,日志包,json包一堆,而且要注意版本兼容性。

2. 配置太多,要配置注解驱动,要配置数据库连接池,要配置Hibernate,要配置事务管理器,要配置Spring MVC的资源映射,要在web.xml中配置启动Spring和Spring MVC等

3. 部署和运行麻烦 。要部署到tomcat里面。不能直接用java命令运行。

太多重复和大家都一样的配置了。


Spring Boot的哲学就是 约定大于配置 。既然很多东西都是一样的,为什么还要去配置。

Spring Boot的三大魔法:
1. 通过starter和依赖管理 解决依赖 问题。
2. 通过自动配置, 解决配置复杂 问题。
3. 通过内嵌web容器,由应用启动tomcat,而不是tomcat启动应用,来 解决部署运行 问题。


Spring Cloud体系就比较复杂了。基本可以理解为通过Spring Boot的三大魔法, 将各种组件整合 在一起,非常简单易用。

Spring Boot学习笔记整理_第2张图片

你可以把spring boot的官方的包分为两类,一种是为了搭建一个服务用的,比如hibernate jpa,比如 message。另外一种含有cloud关键字的,是为了各个spring boot之间管理和使用的包。

因为当把集群、CI等方法集中进来一起考虑的时候,这件事情就复杂了。

多个小有服务整合成的大服务,要有一个消息总线来用于互相通知和调用,要有一个服务发现程序来管理某个小服务上线可用,同时在服务离线时也要能处理,各个小服务要尽量各自独立,还要考虑服务的依赖性,集群的负载均衡,配置文件的分离。

再把CI和Docker拿进来一起考虑的话,更乱。

但我认为这样完成的一个服务是更具有可插拔性,更容易维护的。而且遵循了上面的cloud方案的话,在服务的健壮性上面也很强。

写到这里对于新接触的我认为可以先从单独的spring boot程序开始入门,当要添加一个新功能时,考虑拆分成另外服务。两个程序间可以通过 jmx或是 其它消息中间件或是rest通讯。最后实现了一个各自独立的功能集群。

直白地说: Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系。


2、Spring Boot入门

2.1 运行环境

  • java 8及以上
  • Maven 3.3+ 或 Gradle 4.4+

2.2 手动创建Spring Boot的WEB项目

2.2.1 创建maven项目添加依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    
    <parent>   <!-- 继承默认值为Spring Boot -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>

    <dependencies>
    
        <dependency>  <!--Web应用程序的依赖项-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
    </dependencies>
    
</project>

2.2.2 创建启动项

package demo;

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

@SpringBootApplication
public class DemoApplication {

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

注意包的层次,可能会导致不能够成功启动。


2.2.3 Hello World

package com.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping(name = "/hello")
    public String helloWorld(){
        return "Hello World!";
    }
}

2.2.4 运行main方法

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.3.RELEASE)
....... . . .
....... . . . (log output here)
.......  Tomcat started on port(s): 8080 (http) with context path ''
........ Started DemoApplication in 2.222 seconds (JVM running for 6.514)

出现最后两行行字样,说明Spring Boot启动成功。
倒数第二行的port(s): 8080为端口号。


2.2.5 访问 localhost:8080/hello

Spring Boot学习笔记整理_第3张图片

出现响应内容,即为项目创建成功。


2.3 IDE创建Spring Boot项目

File >>>> New >>>> Project / Module

Spring Boot学习笔记整理_第4张图片
Spring Boot学习笔记整理_第5张图片
Spring Boot学习笔记整理_第6张图片
Spring Boot学习笔记整理_第7张图片

使用IDE创建好项目后,可以将项目中一些不需要的文件或文件夹删除掉


2.4 部分注解介绍

2.4.1 @RestController和 @RequestMapping

  • @RestController的作用相当于@Controller + @ResponseBody,用于提醒返回的内容不是视图名,而是字符串,属于Spring MVC注解。
  • @RequestMapping提供“路由”信息,使得任何符合[/hello]的http请求都可以映射到其注释的方法,该注解也是Spring MVC的。
  • 具体可以参考Spring MVC 部分

2.4.2 @EnableAutoConfiguration

  • @EnableAutoConfiguration的作用启动自动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置,快速入门的demo实际没有用到该注解。
  • 自动配置旨在与“启动器”配合使用,但这两个概念并不直接相关。您可以自由选择jar依赖项。Spring Boot仍然尽力自动配置您的应用程序。

2.4.3 @SpringBootApplication

  • 它是一个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。

2.4.4 @SpringBootConfiguration

  • 它继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中并且实例名就是方法名

2.4.5 @ComponentScan

  • @ComponentScan,扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。是以前的context:component-scan(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。

2.4.6 其他注解

Spring Boot注解说明


2.5 配置文件

Spring Boot 整个应用程序只有一个配置文件,application.properties 或 application.yml 文件。由于Spring Boot使用了很多默认配置,而且我们也可以在这个配置文件中修改配置信息去覆盖默认配置。
这里主要介绍两种文件结构。

2.5.1 application.properties文件结构


server.port=8081                    #修改Tomcat端口 
server.servlet.context-path=/api	#请求前缀
     
     
#如2.2中进行这两项修改,
#请求路径将由 http://localhost:8080/hello 变更为http://localhost:8081/api/hello


2.5.2 application.yml文件结构

server:
  port: 8081
  servlet:
    context-path: /api


#类似于文件夹一样,同一父目录下的配置名可以通过缩进进行表示,不同父目录下的需要另外起行
#效果与2.5.1中的相同

2.5.3 多环境配置

在一个企业级系统中,我们可能会遇到这样一个问题:开发时使用开发环境,测试时使用测试环境,上线时使用生产环境。每个环境的配置都可能不一样,比如开发环境的数据库是本地地址,而测试环境的数据库是测试地址。那我们在打包的时候如何生成不同环境的包呢?

这里的解决方案有很多:

  • 每次编译之前手动把所有配置信息修改成当前运行的环境信息。这种方式导致每次都需要修改,相当麻烦,也容易出错。
  • 利用 Maven,在 pom.xml 里配置多个环境,每次编译之前将 settings.xml 里面修改成当前要编译的环境 ID。这种方式会事先设置好所有环境,缺点就是每次也需要手动指定环境,如果环境指定错误,发布时是不知道的。
  • 第三种方案强烈推荐的方式。

.yml 格式为例:

第一步: 创建application.yml文件,进行如下配置


spring:
  profiles:
    active: dev

#表示应用dev配置文件

第二步: 创建 application-{profiles}.yml 文件,并进行相应环境配置
{profiles} 为被替换内容,我们创建的文件名为 application-dev.yml.properties文件相同只需要将文件后缀改为 .properties 即可。


2.5.4 Spring Boot配置大全

  • 配置大全

你可能感兴趣的:(java,Spring,Boot)