微服务概述
微服务是一种软件开发技术,是面向服务的体系结构(SOA)架构样式的一种变体
它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值
每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)
每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等
另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
微服务特点
微服务的优势
解耦
微服务和整体架构之间的区别在于,微服务由许多较小的,松散耦合的服务组成一个应用程序,与大型,紧密耦合的应用程序的整体方法相反
SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程
另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决
SpringBoot框架中还有两个非常重要的策略:开箱即用 和 约定优于配置
开箱即用(Outofbox)
约定优于配置(Convention over configuration)
是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式
这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化
Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件
回顾我们之前的 SSM 项目,搭建过程还是比较繁琐的,而使用 Spring Boot 来开发项目则只需要非常少的几个配置就可以搭建起来一个 Web 项目,并且利用 IDEA 可以自动生成生成
@RestController注解
相当于Controller注解加ResponseBody注解
同样可以将实例装载进spring核心容器中
application.properties文件
springboot配置文件
修改端口
xxxxxxxxxx
11server.port=8081
springboot底层封装的是spring
spring可以完成的功能:首先会有核心容器,然后将所有组件交由核心容器管理
1、spring中创建核心容器的方式:
基于xml的方式创建核心容器对象
基于核心配置类的方式来创建核心容器对象
2、springboot是如何创建核心容器对象?
springboot框架的目的就是简化spring的开发,尽量避免去写配置文件
springboot是基于核心配置类的方式来创建核心容器对象
@Bean 如果用该注解修饰了一个方法,那么该方法的返回值会作为一份实例存进容器中
3、springboot自动装配包:
@SpringBootApplication注解
自动装配包注解,声明当前工程是一个springboot工程,在入口类Application上由idea生成springboot工程时自动生成
总结:springboot中的自动装配包跟@SpringBootApplication注解有关:
也是springboot中的约定大于配置:入口类所在的包就是springboot指定的资源包
同包或者子包的资源才能被扫描到!
springboot是通过启动类的方式来导入资源,springboot默认会存在一个包叫autoconfiguration,它会存放所有需要被装配类的全类名,通过反射机制创建实例,自动装配到核心容器中
springboot的pom文件中存在一个版本仲裁中心,会帮助我们去管理资源的版本,但是在导入mysql驱动的时候就不能交由springboot管理,需要根据我们自己安装的数据库版本去导入对应驱动
1、需要引入相关坐标
x1<!--数据源相关-->
2<dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-jdbc</artifactId>
5</dependency>
6
7<!--mysql驱动-->
8<dependency>
9 <groupId>mysql</groupId>
10 <artifactId>mysql-connector-java</artifactId>
11 <version>8.0.22</version>
12</dependency>
13
14<!--spring整合mybatis-->
15<dependency>
16 <groupId>org.mybatis.spring.boot</groupId>
17 <artifactId>mybatis-spring-boot-starter</artifactId>
18 <version>1.3.2</version>
19</dependency>
2、需要在application.properties文件中注册数据源信息
xxxxxxxxxx
41spring.datasource.username=root
2spring.datasource.password=root
3spring.datasource.url=jdbc:mysql://localhost:3306/web_test?serverTimezone=GMT&characterEncoding=utf-8
4spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
将mybatis通过代理模式创建的持久层接口实例通过springboot装配进核心容器中
3、在Application类上加@MapperScan注解
mybatis扫描器,类似于spring中的扫描器标签,扫描持久层接口
需要提供持久层接口所在包的全类名
xxxxxxxxxx
11"com.os467.demo.mapper") (
4、在application.properties文件中添加映射xml文件所在位置
xxxxxxxxxx
11mybatis.mapper-locations=classpath:com/os467/demo/mapper/*.xml
由于springboot内置的tomcat不支持jsp所以需要有插件的支持
配置视图解析器
xxxxxxxxxx
31#配置视图解析器
2spring.mvc.view.prefix=/jsp/
3spring.mvc.view.suffix=.jsp
需要导入必要插件坐标
springboot支持jsp
xxxxxxxxxx
61<!--要返回jsp页面需要以下配置-->
2<dependency>
3 <groupId>org.apache.tomcat.embed</groupId>
4 <artifactId>tomcat-embed-jasper</artifactId>
5 <scope>provided</scope>
6</dependency>
以后我们会使用freemark模板,在springboot项目不会使用jsp模板
导入maven坐标
xxxxxxxxxx
51<!--模板引擎-->
2<dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-freemarker</artifactId>
5</dependency>
创建一个freemarker文件
在templates文件下创建一个list.ftl
配置视图解析器
xxxxxxxxxx
41#配置freemark视图的位置
2spring.freemarker.template-loader-path=classpath:/templates/
3#设置freemark的后缀
4spring.freemarker.suffix=.ftl
学习模板引擎的目的就是为了渲染数据,要学习对应的语法
参考博客
遍历集合
xxxxxxxxxx
161<html>
2<head>
3
4</head>
5
6<body>
7
8<#--通过freemarker来遍历集合中的对象-->
9 <#list empList as emp >
10
11 ${emp}
12
13 </#list>
14
15</body>
16</html>
导入maven坐标
xxxxxxxxxx
51<!--redis场景启动器-->
2<dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-data-redis</artifactId>
5</dependency>
redis可以完成对数据的缓存:
先从数据库中把对应的数据查出来,然后将数据存到redis缓存中,下次再查询对应数据的时候就从缓存中取数据,避免多次与数据库进行交互(高并发解决方案之一)
将springboot整合redis的模板对象聚合到controller中
以后用springboot集成第三方技术的时候,都会有模板对象,比如以后在企业中接触到的中间件rabbitmq,activemq,也需要从容器中获取模板对象
xxxxxxxxxx
31//直接从容器中取到redis的模板对象
2
3private RedisTemplate redisTemplate;