SpringBoot入门

1 Spring Boot简介

	(1)Spring应用开发的一个框架,整个Spring技术栈的大整合,J2EE开发的一站式解决方案;

2 首先了解一下单体应用

	(1)单体应用:ALL IN ONE  ,将所有的内容都放在一个应用中,这是我们之前的web传统的模式;

2.1 优点

		开发测试简单,部署简单,运维简单,水平扩展简单,将同一个应用发布在N个系统上,并且实现负载均衡

2.2 缺点

		一个很严重的问题,牵一发而动全身,修改就需要重新发布,部署,无法满足现在业务的需求。

3 微服务

3.1 介绍

	(1)在2014年,martin fowler提出微服务的**架构风格**
	(2)微服务:一个应用应该是一组小型服务,可以通过HTTP的方式进行互通;
	(3)每一个功能元素最终都是一个可独立替换和独立升级的软件单元;
	(4)通过Spring Cloud来实现项目于项目的通讯,互调,数据的操作,等。

3.2优点

	(1)服务独立部署,耦合性低;
	(2)服务快速启动,依赖减少,代码量少;
	(3)更加适合敏捷开发,可独立替换和独立升级的软件单元,不需要整体重新发布;
	(4)职责专一,由专门部分负责专门的服务模块,有利于团体之间分工开发;
	(5)服务动态扩展,当某一个服务访问量过大时候,则可以单独扩容即可;
	(6)代码复用性 ,每个服务提供rest API,所以基础类都必须抽取出来,很多底层实现都可以以通过接口方式提供	。

3.3缺点及避免办法

	(1)分布式部署,调用复杂性高
	单体应用,所以模块的调用都是在本地的;
	微服务,每个模块都是独立部署,通过HTTP来进行通信,可能会产生很多问题,如网络,容错,调用关系等。
(2)独立数据库,分布式事务的挑战
	每个服务都有自己的数据库,去中心化的数据管理,这种模式优点在于不同的服务器,可以选择自身合适的数据库;
	如 :订单服务使用MySQL ,评论服务可以使用Mongodb ,商品搜索服务可以用Elasticsearch;
	缺点就是分布式事务管理,解决方案就是柔性事务中的最终一致性。
(3)测试的难度提升
	服务和服务通过接口来交互,接口有改变时候,调用方法都由影响,这时候自动化测试就非常重要。
(4)运维难度的提升
	单体应用,只需要关注一个Tomcat集群,一个MySQL的集群即可;
	分布式,当业务增加时,服务器越来越多,服务的部署,监控变的非常复杂,提高运维难度。

4 Spring Boot 环境的配置

4.1 已掌握技能

(1)Spring框架的使用经验
(2)熟练Maven进行项目构建和依赖管理
(3)熟练使用STS或者IDEA

4.2 环境约束

(1)JDK 1.8  			SpringBoot推荐1.7及以上						通过cmd中 java -version
(2)Maven3.x			SpringBoot推荐3.3及以上较为稳定			通过maven安装根目录下 mvn -v
(3)SpringBoot 1.5.9.RELEASE

4.3 Maven配置

(1)配置Maven根目录中conf文件中settings.xml配置文件中本地库,可配可不配,约配置在55行附近

	<localRepository>${user.home}/.m5/repository</localRepository>

(2)配置Maven中远程仓库,根据自己需求,阿里云静态服务器仓库,约配置在155行附近

		<mirror>  
		  <id>alimaven</id>  
		  <name>aliyun maven</name>  
		  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		  <mirrorOf>central</mirrorOf>          
		</mirror>

(3)配置Maven中JDK版本,建议必须配置为1.7以上版本,JDK版本约配置在220行附近

	<profile>
		   <id>jdk-1.8</id>
		   <activation>
			<activeByDefault>true</activeByDefault>
		      <jdk>1.8</jdk>
		   </activation>
		   <properties>
			   <maven.compiler.source>1.8</maven.compiler.source>
			   <maven.compiler.target>1.8</maven.compiler.target>
			   <maven.compiler.compilerVersion>
		       1.8
		     </maven.compiler.compilerVersion>
			 </properties>
	</profile>

4.4 IDEA配置Maven

(1)通过IDEA中打开File中Setting设置,搜索框Maven,修改如图配置
在这里插入图片描述

5 Spring Boot入门案例 Hello World

需求说明:浏览器发送hello请求,服务器接收请求并处理,相应HelloWorld字符串

5.1 创建Maven工程(jar)

(1)打开File中New中Project,如下操作即可
在这里插入图片描述
(2)。。。。
在这里插入图片描述
(3)项目名称与项目的路径可更换到自己的目录下
在这里插入图片描述
(4)弹出内容为Maven项目需要导入依赖,点击自动导入,则pom.xml文件中配置依赖则自动导入。
在这里插入图片描述

5.2 导入Spring Boot依赖

 		<parent>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-parent</artifactId>
	        <version>2.3.2.RELEASE</version>
	    </parent>
	    <dependencies>
	        <dependency>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-starter-web</artifactId>
	        </dependency>
	    </dependencies>

5.3 编写一个主启动类

		package com.demo;
		
		import org.springframework.boot.SpringApplication;
		import org.springframework.boot.autoconfigure.SpringBootApplication;
		/**
		 * @SpringBootApplication此注解修饰为SpringBoot主启动类
		 */
		@SpringBootApplication
		public class HelloWorldMainApplication {
		    //快捷键 psvm生成main方法
		    public static void main(String[] args) {
		        //Spring应用启动
		        SpringApplication.run(HelloWorldMainApplication.class,args);
		    }
		}

5.4 编辑controller

		package com.demo.controller;
		
		import org.springframework.stereotype.Controller;
		import org.springframework.web.bind.annotation.RequestMapping;
		import org.springframework.web.bind.annotation.ResponseBody;
		/**
		 * @Controller 交给Spring容器进行管理该对象
		 * @ResponseBody 将返回数据直接返回页面,不通过视图解析器
		 * @RequestMapping("/hello") 代表通过hello请求进行访问此方法
		 * http://localhost:8080/hello    localhost:8080是tomcat服务器默认端口
		 */
		@Controller
		@ResponseBody
		public class HelloWorld {
		    @RequestMapping("/hello")
		    public String hello(){
		       return "HelloWorld!!!!";
		    }
		}

5.5 导入打包插件

    <!--此插件为打包插件,必须添加,即可打包为jar报-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

5.6 打包jar包

在这里插入图片描述

5.7 将jar包复制到目录中

(1)jar包的目录下,通过 java -jar spring-boot-01-helloworld-1.0-SNAPSHOT.jar 执行即可
注意:不要将jar包放到C盘,如果没有其他盘符,不要放在敏感盘符中,可能会导致权限的问题。
在这里插入图片描述
(2)执行成功在这里插入图片描述
(3)访问 http://localhost:8080/hello
在这里插入图片描述

6 分析Spring Boot项目pom文件

6.1分析pom.xml文件

(1) Spring Boot依赖于dependencies项目

	<!--Spring Boot依赖于spring-boot-dependencies项目中properties标签中配置很多相关框架的依赖版本-->
    <!--Spring Boot的版本仲裁中心,以后在导入框架依赖无需导入版本(如果没有则需要声名版本)-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
    </parent>

(2) Dependencies项目中的Properties标签中配置了相关依赖的版本;
则说明导入依赖时只需要声明依赖不需要配置版本(标签中未配置的依赖也是需要指定版本)。

	  <parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-dependencies</artifactId>
	    <version>2.3.2.RELEASE</version>
	  </parent>

(3) 相关依赖,简单列举一部分
在这里插入图片描述

6.2 启动器

(1)spring-boot-starter-web :SpringBoot场景启动器,帮我们导入了web模块正常运行的依赖组件,如json,tomcat,web,webmvc等

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

(2)通过SpringBoot将所有的场景功能都抽取出来,成为一个个starters(启动器),只需要在项目中引入相关的starters场景,则依赖都会导入进来,实现需要什么场景直接导入什么场景启动器。
如 : aop,redis,web,jpa数据库,monogdb非关系数据库,等等
在这里插入图片描述

7 Spring Boot主程序类解析

7.1 分析主程序

	package com.demo;
	
	import org.springframework.boot.SpringApplication;
	import org.springframework.boot.autoconfigure.SpringBootApplication;
	/**
	 * @SpringBootApplication此注解修饰为SpringBoot主启动类
	 */
	@SpringBootApplication
	public class HelloWorldMainApplication {
	    //快捷键 psvm生成main方法
	    public static void main(String[] args) {
	        //Spring应用启动
	        SpringApplication.run(HelloWorldMainApplication.class,args);
	    }
	}

@SpringBootApplication注解,主程序入口注解,此注解标注在某一个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法启动SpringBoot应用

7.2 分析@SpringBootApplication注解

	@Target(ElementType.TYPE)
	@Retention(RetentionPolicy.RUNTIME)
	@Documented
	@Inherited
	@SpringBootConfiguration
	@EnableAutoConfiguration
	@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
	@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
	public @interface SpringBootApplication {

(1)@SpringBootConfiguration :SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot配置类;
@Configuration:Spring配置类上标注此类,配置类==配置文件,配置类也是容器中的组件
(2)@EnableAutoConfiguration:开启SpringBoot的自动配置功能,不需要我们手动配置;
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class) 由@Import注解中类将Spring中组件导入到容器中
通过短点查看Registrar类中registerBeanDefinitions方法,返回@SpringBootApplication注解修饰的包名称
由此可见此注解修饰后的包,即子包里面的组件都会扫描到Spring容器中。
在这里插入图片描述
@Import(AutoConfigurationImportSelector.class) 给容器中导入组件?
AutoConfigurationImportSelector:此类导入哪些组件选择器?
导入组件以全类名的方式String数组返回,这些组件将会被添加到容器中;
通过Debugger模式,给容器中导入的组件非常多的自动配置类(xxxAutoConfigration),将容器中导入场景需要的
所有组件,并配置好这些组件
在这里插入图片描述
有了自动配置类,免去了我们手动编写配置注入等功能的工作;
通过调用SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,ClassLoader);
SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取 EnableAutoConfiguration指定的值,
将这些值作为制动配置类导入到容器中,自动配置类就生效,实现自动配置

J2EE的整合解决方案和自动配置都在spring-boot-autoconfigure-2.3.2.RELEASE.jar
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值