Spring Boot

Spring/SpringBoot

一.Spring 基础

1.Spring 概述

Spring 的简史
	xml 配置
	注解配置
	java 配置

Spring 概述
	Spring 的模块
		核心容器 CoreContainer
			Spring-Core
			Spring-Beans
			Spring-Context
			Spring-Context-Support
			Spring-Expression
		AOP 
			Spring-AOP
			Spring-Aspects
		Messaging
			Spring-Messaging
		WEB
			Spring-Web
			Spring-WebMVC
			Spring-Websocket
			Spring-WebMvc-Portlet
		数据访问/集成(DataAccess/Intefration)
    		Spring-JDBC
    		Spring-TX
    		Spring-ORM
    		Spring-OXM
    		Spring-JMS
	
	Spring 的生态
		Spring Boot
		Spring XD
		Spring Data
		Spring Integration
		Spring Batch
		Spring Security
		Spring HATEOAS
		Spring Social
		Spring AMQP
		Spring Mobile
		Spring for Android
		Spring Web Flow
		Spring Web Services
		Spring LDAP
		Spring Session

2.Spring 基础配置

1.使用 POJO 进行轻量级和最小侵入式开发
2.通过依赖注入和基于接口编程实现松耦合
3.通过 AOP 和默认习惯进行声明式编程
4.使用 AOP 和模板(template) 减少模块化代码
Spring 所有功能的设计和实现都是基于此四大原则

依赖注入:
	声明Bean的注解
		@Component 组件,没有明确的角色
		@Service 在业务逻辑层(service层)
    	@Repository 在数据访问层(dao层)
    	@Controller 在展现层(MVC——>SpringMVC)
	注入Bean的注解
		@Autowired:Spring 提供的注解
		@Inject:JSR-330 提供的注解
		@Resource:JSR-250 提供的注解

Java 配置
	@Configuration 声明当前类是一个配置类
	@Bean 注解在方法上,声明当前方法的返回值为一个 Bean.

AOP
	面向切面编程,相对于 OOP 面向对象编程。Spring的AOP的存在的目的是为了解耦。AOP 可以让一组类共享相同的行为。
	在 OOP 中只能通过继承类和实现接口,来代码的耦合度增强,且类继承只能为单继承,阻碍更多行为添加到一组类上,AOP弥补了OOP的不足。
	
	@Aspact 声明是一个切面
	拦截规则@After@Before,@Around
	PointCut
	JoinPoint

二.Spring 常用配置

1.Bean 的 Scope

scope : 描述的是 Spring 容器如何新建 Bean 的实例

Singleton :
	一个 Spring 容器中只有一个 Bean 的实例,此为 Spring 的默认配置,全容器共享一个实例
	
Prototype :
	每次调用新建一个 Bean 的实例。

Request:
	Web 项目中给每一个 http request 新建一个 Bean 实例

Session:
	Web 项目中给每一个 http Session 新建一个 Bean 实例

GlobalSession:
	这个只在 portal 应用中有用,给每一个 global http session 新建一个 Bean 实例。


2.SpringEL和资源调用

注入普通字符
注入操作系统属性
注入表达式计算结果
注入其他 Bean 的属性
注入文件内容
注入网址内容
注入属性文件

3.Bean 的初始化和销毁

Java 配置方式
	@Bean 的 initMethod 和 destroyMethod 方法
	
注解方式
	JSR250-API
	利用 JSR-250@PostConstruct@PreDestroy

4.Profile

Profile 为在不同环境下使用不同的配置提供了支持

@Profile
通过设定 JVM 的 spring.profiles.active 参数
web 项目设置在 Servlet 的 context paramter 中

5.事件Application Event

为 Bean 与 Bean 之间的消息通信提供了支持。当一个Bean 处理完一个任务之后,希望另一个 Bean 知道并能做相应的处理,这时我们就需要
让另一个 Bean 监听当前 Bean 所发送的事件。

自定义事件,继承 ApplicationEvent
定义事件监听器,实现 ApplicationListener
使用容器发布事件

三.Spring 高级话题

1.Spring Aware

BeanNameAware
	获得到容器中 Bean 的名称

BeanFactoryAware
	获取当前 bean factory,这样可以调用容器的服务

ApplicationContextAware
	当前的 Application Context,这样可以调用容器的服务

MessageSourceAware
	获得 Message source,这样可以获得文本信息

ApplicationEventPublisherAware
	应用时间发布器,可以发布时间

ResourceLoaderAware
	获得资源加载器,可以获得外部资源文件

2.多线程

Spring 通过任务执行器(TaskExecutor)来实现多线程和并发编程。
使用 ThreadPoolTaskExecutor 可实现一个基于线程池的 TaskExecutor
实际开发中,任务一般是非阻碍的,即异步的,所以我们要在配置类中通过 @EnableAsync 开启对异步任务的支持,并通过
	在实际执行的 Bean 的方法中使用 @Async 注解来声明其是一个异步任务。

3.计划任务

计划任务在 Spring 中的实现变得异常的简单,首先通过在配置类注解 @EnableScheduling 来开启对计划任务的支持,
	然后在要执行计划任务的方法上注解 @Scheduled,声明这是一个计划任务
	
cron
fixDelay
fixRate

4.条件注解@Conditional

@Conditional 根据满足某一个特定条件创建一个特定的 Bean.
当某一个 Jar 在一个类路径下的时候,自动配置一个或多个 Bean;或者只有某个 Bean 被创建才会创建另外一个 Bean,
总的来说,就是根据特定条件来控制 Bean 的创建行为,这样我们可以利用这个特性进行一些自动的配置。

5.组合注解与元注解

6.@Enable*注解的工作原理

直接导入配置类
依据条件选择配置类
动态注册 Bean

7.测试

Spring TestContext Framework 集成测试。

四.SpringMVC 基础

1.SpringMVC 的常用注解

@Controller
@RequestMapping
@ResponseBody
@RequestBody
@PathVariable
@RestController

2.SpringMVC 的基本配置

静态资源映射
拦截器配置

@ControllerAdvice
	@ExceptionHandler
		用于全局处理控制器里的异常
	@InitBinder
		用来设置 WebDataBinder: WebDataBinder用来自动绑定前后请求参数到 Model 中。
	@ModelAttribute
		@ModelAttribute 本来的作用是绑定键值对到 Model 里,
		此处是让全局的 @RequestMapping 都能获得在此处设置的键值对。

其他配置
	ViewController
	路径匹配参数配置
	WebMvcConfigurerAdapter
	WebMvcConfigurer

3.SpringMVC 的高级配置

文件上传配置
	commons-fileupload 
	文件上传是一个项目里经常要用到的功能,Spring MVC 通过配置一个 MultipartResolver 来接受文件,通过
		MultipartFile[] files 接收多个文件上传

自定义HttpMessageConverter
	HttpMessageConverter 是用来处理 request 和 response 里的数据的。
	MappingJackson2HttpMessageConverter
	StringHttpMessageConverter

服务器端推送技术
	当客户端向服务端发送请求,服务端会抓住这个请求不放,等有数据更新的时候才返回给客户端,当客户端接收到消息后,
		再向服务端发送请求,周而复始。
		
	SSE(Server Send Event 服务端发送事件)的服务器端推送和基于 Servlet3.0+的异步方法特性,其中第一种方式需要
    新式浏览器的支持,第二种方式是跨浏览器的。
    
    Servlet3.0+异步方法处理
	

4.SpringMVC 的测试

MockMVC
MockHttpServletRequest
MockHttpServletResponse
MockHttpSession

五.SpringBoot 基础

SpringBoot:
	随着动态语言的流行,Java 开发显得格外的笨重:繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度大。
	SpringBoot 应用而生。
	它使用"习惯优于配置"(项目中存在大量的配置,此外还内置一个习惯性配置,它让你无需手动进行配置)的理念让你的项目快运行起来。
	使用 SpringBoot 很容易创建一个独立运行(运行 Jar 内嵌 Servlet 容器)准生产级别的基于 Spring 框架的项目,使用 SpringBoot
	你可以不用或者只需要很少的 Spring 配置。
	
Spring 核心功能:
	独立运行的 Spring 项目 : SpringBoot 可以以 Java 包的形式独立运行,运行一个 Spring Boot 项目只需要通过 java -jar xx.jar 来运行
	内嵌 Servlet 容器:Spring Boot 可选择内嵌 Tomcat Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目
	提供 starter 简化 maven 配置
	自动配置  Spring
	准生产的应用监控
	无代码声称和 xml 配置 : 注解
	
SpringBoot 优点:
	快速构建项目
	对主流开发框架的无配置集成
	项目可独立运行,无需外部依赖 Servlet 容器
	提供运行时的应用监控
	极大的提高了开发,部署效率
	与云计算的天然集成

		

六.SpringBoot 核心

1.基本配置

入口类和 @SpringBootApplication 
	@Configuration
	@EnableAutoConfiguration
	@ComponentScan
	
关闭特定的自动配置
	使用 @SpringBootApplication 注解的 exclude 参数:
		例如:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
    
    
定制 Banner
	修改Banner
		src/mainresource 新建一个 banner.txt 通过 http://patorjk.com/software/taag
	关闭Banner
		main 里修改
		fluentAPI


SpringBoot 的配置文件
	application.properties
	application.yml
	src/main/resources
	
Starter pom
	官方 starter pom
		spring-boot-starter :  SpringBoot 核心 Starter,包含自动配置,日志,yml 配置文件的支持
		spring-boot-starter-actuator : 准生产特性,用来监控和管理应用
		spring-boot-starter-remote-shell : 提供基于 ssh 协议的监控和管理
		spring-boot-starter-amqp : 使用 Spring-rabbit 来支持 AMQP
		spring-boot-starter-aop : 使用 Spring-AOP 和 AspectJ 支持面向切面编程
		spring-boot-starter-batch : 对 Spring Batch 的支持
 		spring-boot-starter-cache : 对 Spring Cache 抽象的支持
		spring-boot-starter-cloud-connectors : 对云平台(Cloud Foundry Heroku) 提供的服务提供简化的连接方式
		spring-boot-starter-date-elasticsearch : 通过 Spring-data-elasticsearch 对 Elasticsearch 支持
		spring-boot-starter-data-gemfire : 通过对spring-data-gemfire对分布式存储GemFire的支持
		spring-boot-starter-data-jpa : 对JPA的支持,包含spring-data-jpa spring-orm和Hibernate
		spring-boot-starter-data-mongodb : 通过spring-data-mongdb,对MongoDB进行支持
		spring-boot-starter-data-rest : 通过spring-data-rest-webmvc将Spring Data repository 暴露为REST形式的服务
		spring-boot-starter-data-solr : 通过spring-data-solrd对Apache Solr 数据检索平台的支持
		spring-boot-starter-freemarker : 对 Freemarker 模板引擎的支持
		spring-boot-starter-groovy-templates : 对 Groovy 模板引擎的支持
		spring-boot-starter-hateoas : 通过 Spring-hateoas 对基于 HATEOAS 的 REST 形式的网络服务的支持
		spring-boot-starter-hornetq : 通过HornetQ对JMS的支持
		spring-boot-starter-integration : 对系统集成框架spring-integration的支持
		spring-boot-starter-jdbc : 对JDBC数据库的支持
		spring-boot-starter-jerscy : 对Jersery REST形式的网络服务的支持
		spring-boot-starter-jta-atomikos : 通过Atomikos对分布式事务的支持
		spring-boot-starter-jta-bitronix : 通过Bitronix对分布式事务的支持
		spring-boot-starter-mail : 对javax.mai的支持
		spring-boot-starter-mobile : 对spring-mobile的支持
		spring-boot-starter-mustache : 对Mustache模板引擎的支持
		spring-boot-starter-redis : 对键值对内存数据库Redis的支持,包含spring-redis
		spring-boot-starter-security : 对spring-security的支持
		spring-boot-starter-social-facebook : 通过spring-social-facebook对Facebook的支持
		spring-boot-starter-social-linkedin : 通过spring-social-linkedin对Linkedin的支持
		spring-boot-starter-social-twitter : 通过spring-social-twitter对Twitter的支持
		spring-boot-starter-test : 对常用的测试框架JUnit Hamcrest 和Mockito的支持,包含spring-test模块
		spring-boot-starter-thymeleaf : 对Thymeleaf模版引擎的支持,包含于Spring整合的配置
		spring-boot-starter-velocity : 对Velocity模版引擎的支持
		spring-boot-starter-web : 对Web项目开发的支持,包含Tomcat和spring-webmvc
		spring-boot-starter-Tomcat : Spring Boot默认的Servlet容器Tomcat
		spring-boot-starter-Jetty : 使用Jetty作为Servlet容器替换Tomcat
		spring-boot-starter-undertow : 使用Undertow作为Servlet容器替换Tomcat
		spring-boot-starter-logging : Spring Boot 默认的日志框架Logback
		spring-boot-starter-log4j : 支持使用Log4J日志框架
		spring-boot-starter-websocket : 对WebSocket开发的支持
 		spring-boot-starter-ws : 对Spring Web Services的支持
 		
 	第三方 Starter Pom 
 		Handlebars
 		Vaadin
 		Apache Camel
 		WRO4J
 		Spring Batch
 		HDIV
 		Jade Templates(jade4J)
       	Activiti

使用 xml 配置 : @ImportResource



2.外部配置

外部配置
	命令行参数配置
	常规属性配置
	类型安全的配置(基于 properties)

3.日志配置

4.Profile 配置

5.SpringBoot运行原理

java -jar xx.jar --debug
appliaction.properties
	debug=true

1.运作原理

2.核心注解

@ConditionalOnBean  :当容器里有指定的 Bean 的条件下
@ConditionalOnClass : 当类路径下有指定的类的条件下
@ConfitionalOnExpression :基于SpEL表达式作为判断条件
@ConditionalOnJava : 基于JVM版本作为判断条件
@ConditionalOnJndi : 在JNDI存在的条件下查找指定的位置
@ConditionalOnMissingBean : 当容器里没有指定Bean的情况下
@ConditionalOnMissingClass : 当类路径下没有指定的类的条件下
@ConditionalOnNotWebApplication : 当前项目不是Web项目的条件下
@ConditionalOnProperty : 指定的属性是否有指定的值
@ConditionalOnResource	: 类路径是否有指定的值
@ConditionalOnSingleCandidate :当指定Bean在容器中只有一个,或者虽然有多个但是指定首选的Bean
@ConditionalWebApplication : 当前项目是Web项目的条件下


3.实例分析

配置参数
配置 Bean

七.springBoot 的 WEB 开发

1.SpringBoot 的 Web 开发支持

ServerPropertiesAutoConfiguration 和 ServerProperties : 自动配置内嵌 Servlet 容器
HttpEncodingAutoConfiguration 和 HttpEncodingProperties :用来自动配置 http 的编码
MultipartAutoConfiguration 和 MultipartProperties :用来自动配置上传文件的属性
JacksonHttpMessageConvertersConfiguration :
	用来自动配置 mappingJackson2HttpMessageConverter 和 mappingJackson2XmlHttpMessageConverter
WebMvcAutoConfiguration 和 WebMvcProperties : 配置 SpringMVC.

2.Thymeleaf 模板引擎

Thymeleaf 模板引擎

	Thymeleaf 基础知识
			Thymeleaf是一个Java类库,它是一个xml/xhtml/html5的模版引擎,可以作为MVC的Web应用的View层.
    	Thymeleaf还提供了额外的模块与Sping MVC集成,所以我们可以使用Thymeleaf完全替代JSP。
    
    	引入 Thymeleaf
    	访问 model 中的数据
    	model 中的数据迭代
    	数据判断
    	在 Javascript 中访问 html
    	其他知识:http://www.thymeleaf.org
    	
	与 SpringMVC 集成
	SpringBoot 的 Thymeleaf 支持

3.Web 相关配置

SpringBoot 提供的自动配置
	自动配置的 ViewResoler :
		ContentNegotiatingViewResolver
		BeanNameViewResolver
		InternalResourceViewResolver
	自动配置的静态资源
    	类路径文件
    	webjar
   	自动配置的 Formatter 和 Converter
   	自动配置的 HttpMessageConverters
   	静态首页的支持
	

接管 SpringBoot 的 Web 配置
	

注册 Servlet,Filter,Listener

4.Tomcat 配置

Tomcat 配置:

	配置 Tomcat :
		配置 Servlet 容器
			server.port
		配置 Tomcat 
			server.tomcat.uri-encoding
			
			
	代码配置 Tomcat 
		通用配置 :
			新建类的配置
			当前配置文件内配置
		特定配置
		
		
	替换 Tomcat
		替换为 Jetty
		替换为 Undertow
		
	
	SSL 配置
		生成证书:
			keytool
				keytool -genkey -alias tomcat
		SpringBoot 配置 SSL
        http 转向  Https
        
	

5.Favicon 配置

默认的 Favicon

关闭 Favicon 
	spring.mvc.favicon.enabled=false
  
设置自己的 Favicon
	favicon.ico放置在src/main/resources/static

6.WebSocket

WebSocket:
	WebSocket为浏览器和服务端提供了双工异步通信的功能,即浏览器可以向服务端发送消息,服务端也可以向浏览器发送消息.
    
SpringBoot 提供的自动配置
	Spring Boot 为WebSocket提供的 stater pom是spring-boot-starter-websocket
	
实战:
	准备 : 选择 Thymeleaf 和 WebSocket 依赖
	广播式: 广播式即服务端有消息时,会将消息发送给所有连接了当前endpoint的浏览器
		配置 WebSocket
			需要在配置类上使用@EnableWebSocketMessageBroket开启WebSoccket支持,
			并通过继承AbstractWebSocketMessageBrokerConfigurer类,重写其方法来配置WebSocket
		浏览器向服务端发送的消息用此类接收
		服务端向浏览器发送的此类的消息
		控制器
		添加脚本
		演示页面
		配置 ViewController
	点对点式:
		添加 Spring Security 的 starter pom
		Spring Security 的简单配置
		配置 WebSocket
		控制器
		登录页面
		聊天页面
		增加页面的 ViewController

7.基于 Bootstrap 和 AnglargJS 的现代 Web 应用

单页面应用
	简称 SPA,指的是一种类似于原生客户端软件的更流畅的用户体验的页面
	
响应式设计
	简称 RWD,指的是不同的设备(电脑、平板、手机)访问相同的页面的时候,得到不同的页面视图,而得到视图是适应当前屏幕的。
	
数据导向是对于页面而言的,页面上的数据获得是通过消费后台的 REST 服务来实现的,而不是通过服务器渲染的动态页面来实现的,
	一般数据交换使用的格式是 JSON。
	
	
Bootsrap :
	什么是 Bootstrap
	下载并引入 Bootstrap
	CSS 支持
	页面组件支持
	JavaScript 支持
	
AngularJS
	什么是 AngularJS
	下载并导入 AngularJS
	模块,控制器和数据绑定
	scope 和 event :
		scope
		Event 
			冒泡事件
			广播事件
	多视图和路由
	依赖注入
	Service 和 Factory
	自定义指令

八.SpringBoot 的数据访问

1.引入 Docker

Docker 安装
	Linux 下安装
	Windows 下安装
	
Docker 常用命令及参数
	Docker 镜像命令
		Docker 镜像检索
			docker search 镜像名
			docker search redis
		镜像下载
			docker pull 镜像名
			docker pull redis
		镜像列表
			docker images
		删除镜像
			删除指定镜像
				docker rmi image-id
			删除所有镜像
				docker rmi$(docker images -g)
    
	Docker 容器命令
		容器基本操作
			最简单的运行镜像容器
				docker run --name container-name -d image-name
		容器列表
			docker ps
		查看运行和停止状态
			docker ps -a
			
	停止和启动容器
		停止容器
			docker stop container-name/container-id
			docker stop test-redis
		启动容器
			docker start container-name/container-id
			docker start test-redis
		端口映射
			Docker容器中运行的软件所使用的端口,在本机和本机的局域网是不能访问的,所以我们需要将Docker
			容器中的端口映射到当前主机的端口上,这样我们在本机和本机所在的局域网就能够访问该软件了
			docker run -d -p 6378:6379 --name port-redis redis
		删除容器
			删除单个容器
				docker rm container-id
			删除所有容器
				dokcer rm $(docker ps -a -q)
		容器日志
			查看当前容器日志
				docker logs container-name/container-id
				docker logs port-redis
		登录容器
			docker exec -it container-id/container-name bash
	
下载所需的 Docker 镜像
	docker pull wnameless/oracle-xe-11g
    docker pull mongo
    docker pull redis:2.8.21
    docker pull cloudesire/activemq
    docker pull rabbitmq
    docker pull rabbitmq:3-management
    
异常处理
	boot2docker ssh

2.SpringDataJPA

2.1.SpringDataJPA

什么是 Spring Data JPA
定义数据访问层
	继承 JpaRepository
	public interface PersonRepository extends JpaRepository<Person,Long>{
		//定义数据访问操作方法
	}
	
配置使用 @EnableJpaRepositories
    
定义查询方法:
	根据属性名查询
		常规查询
			select p from person p wehere p.name=?1
			List findByName(string name);

			select p from person p wehere p.name like ?1
			List findByNameLike(string name);

			select p from person p wehere p.name =?1 and p.address=?2
			List findByNameAndAddress(string name,String address);
		限制结果数量
			List findFirst10ByName(String name);

	使用 JPA 的 NamedQuery
	使用 @Query 查询
		使用参数索引
		使用命名参数
		更新查询
		Specification
		排序与分页
			定义
			使用排序
			使用分页
		
		
自定义 Repository 的实现	
	定义自定义 Repository 接口
	定义接口实现
	自定义 RepositoryFactoryBean
	开启自定义支持使用 @EnableJpaRepositories 的 repositoryFactoryBeanClass 来指定 FactoryBean 即可
	


2.2.SpringBoot 的支持

JDBC 的自动配置
对 JPA 的自动配置
对 Spring Data JPA 的自动配置
Spring Boot 下的 Spring Data JPA

2.3.实例

实例
	安装 Oracle XE :
		非 Docker 安装
		Docker 安装
			运行一个oracle容器
				docker run -d -p 9090:8080 -p 1521:1521 我那么less/oracle-xe-11g
		端口映射
		管理
	新建 SpringBoot项目
	配置基本属性
		spring:
 	 	profiles: dev
  		datasource:
      		url: jdbc:postgresql://192.168.3.219:5432/intp-fxl?useUnicode=true=utf-8
      		username: postgres
      		password: postgres
      		filters: log4j,wall,mergeStat
      定义映射实体类
      定义数据访问接口
      运行

3.SpringDataREST

2.1.Spring Data REST

Spring Data TEST
	什么是 Spring Data REST
	Spring MVC 中配置使用 Spring Data REST 
		继承方式
			RepositoryRestMvcConfiguration
		导入方式
			@Configuration
			@Import(RepositoryRestMvcConfiguration.class)

2.2.Spring Boot 的支持

2.3实例

新建 Spring Boot 项目
实体类
实体类的 Repository
Postman
REST 服务测试
	JQuery
	AngularJS
	列表
	获取单一对象
	查询
	分页
	排序
	保存
	更新
	删除
定制:
	定制根路径
		spring.data.rest.base-path= /api
	定制节点路径
		@RepositoryRestResource(path="people")

4.声明式事务

4.1.Spring 的事务机制

提供一个PlatformTransactionManager接口,不同的数据访问技术的事务使用不同的接口实现

JDBC :DataSourceTransactionManager
JPA :JpaTransactionManager
Hibernate : HibernateTransactionManager
JDO : JdoTransactionManager
分布式事务 : JtaTransactionManager

4.2.声明式事务

@Transactional

4.3.注解事务方式

4.4.类级别使用 @Transactional

4.5.SpringDataJPA的事务支持

4.6.SpringBoot 的事务支持

自动配置的事务管理器
自动开启注解事务的支持

5.数据缓存 Cache

内存速度大于硬盘速度.
当我们需要重复地获取相同的数据的时候,我们一次又一次的请求数据库或者远程服务,导致大量的时间耗费在数据库查询或者远程方法调用上,
导致程序性能的恶化,这便是数据缓存要解决的问题.

5.1.Spring 缓存支持

Spring 支持的 CacheManager 
	SimpleCacheManager : 使用简单的Collection来存储缓存,主要用来测试用途
	ConcurrentMapCacheManager : 使用ConcurrentMap来存储缓存
	NoOpCacheManager : 仅测试用途,不会实际存储缓存
	EhCacheCacheManager : 使用EhCache作为缓存技术
	GuavaCacheManager : 使用Google Guava的GuavaCache作为缓存技术
	HazelcastCacheManager : 使用Hazelcast作为缓存技术
	JCacheCacheManager : 支持Jcache(JSR-107)标准的实现作为缓存技术,如Apache Commons JCS
	RedisCacheManager : 使用Redis 作为缓存技术
	
声明式缓存注解
	@Cacheable
		在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放进缓存
	@CachePut
		无论怎样,都会将方法的返回值放到缓存中.@CachePut的属性与@Cacheable保持一致
	@CacheEvict
		将一条或多条数据从缓存中删除
	@Caching
		可以通过@Caching注解组合多个注解策略在一个方法上
		
开启声明式缓存支持
	@EnableCaching

5.2.SpringBoot 的事务支持

5.3.切换缓存技术

EhCache
Guava
Redis

6.非关系型数据库 NoSQL

NoSQL是对于不使用惯性作为数据管理的数据库系统的统称.
NoSQL的主要特点是不使用SQL语言作为查询语言,数据存储也不是固定那个的表,字段

主要有文档存储型(MongoDB)
图形关系存储型(Neo4j)
键值对存储型(Redis)


MongoDB
	MongoDB是一个基于文档(Document)的存储型的数据库,使用面向对象的思想,每一条数据记录都是文档的对象.
    
	Spring 的支持 : Spring 对MongoDB的支持主要是通过Spring Data MongoDB来实现.
    	Object/Document 映射注解支持
				JPA提供了一套Object/Relation映射的注解(@Entity @Id),
			@Document : 映射领域对象与MongoDB的一个文档
			@Id : 映射当前属性是ID
			@DbRef : ID档前属性将参考其他的文档
			@Field : 为文档的属性定义名称
			@Version : 将当前属性作为版本
		MongoTemplate
		Repository 的支持
	SpringBoot 的支持
	安装 MongoDB
		非 Docker
		Docker 安装
			docker run -d -p 27017:27017 mongo
		
Redis
	Spring 的支持
		配置
		使用
			opsForValue() : 操作只有简单属性的数据
            opsForList() : 操作含有list的数据
            opsForSet() : 操作含有set的数据
            opsForZSet() : 操作含有ZSet(有序的set)的数据
            opsForHash() : 操作含有hash的数据
		定义 Serializer
	Spring Boot 支持
	安装 Redis
		非 Docker 安装
		Docker 安装
			docker run -d -p 6379:6379 redis:2.8.21

九.SpringBoot企业级开发

1.安全控制 SpringSecurity

SpringSecurity 快速入门
	什么是 Spring Security
		Spring Security是专门针对基于Spring的项目的安全框架,充分利用了依赖注入和AOP来实现安全的功能.
		安全框架有两个重要的概念,即认证(Authentication)和授权(Authorization),认证即确认用户可以访问当前系统;
		授权即确定用户在当前系统下所拥有的功能权限
	Spring Security 的配置
		DelegatingFilterProxy
		用户认证:
			内存中的用户
			JDBC 中的用户
			通用的用户
			请求授权
			定制登录行为
SpringBoot 的支持
	自动配置了一个内存中的用户
	忽略 /css/** /js/** /images/** /**/favicon.ico 等静态文件的拦截
	自动配置的 securityFilterChainRegistration 的Bean.
	

2.批处理 SpringBatch

SpringBatch 快速入门
	什么是 Spring Batch
		Spring Batch是用来处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定处理后输出称指定的形式.
	Spring Batch 主要组成
		JobRepository  :  用来注册Job的容器
		JobLauncher  : 用来启动Job的接口
		Job :  我们要实际执行的任务,包含一个或多个Step
		Step :  Step步骤包含ItemReader,ItemProcessor,ItemWriter
		ItemReader : 用来读取数据的接口
		ItemProcessor : 用来处理数据的接口
		ItemWriter : 用来输出数据的接口
	Job 监听
		实现 JobExecutionListener :   implements JobExecutionListener
	数据读取
	数据处理及校验
		数据处理
		数据校验
	数据输出
	计划任务
	参数后置绑定
	
SpringBoot 的支持

3.异步消息

异步消息
	主要目的:是为了系统与系统之间的通信。所谓异步消息即消息发送者无须等待消息接收者的处理及返回,甚至无须关心消息是否发送成功。
	
	在异步消息中有两个很重要的概念,即消息代理和目的地。当消息发送者发送消息后,消息将由消息代理接管,消息代理保证消息传递到指定的目的地。
	
	异步消息主要有两种形式的目的地:队列(queue)和主题(topic)。队列用于点对点式(point-to-point)的消息通信;主题用于发布/订阅式
		(publish/subscribe) 的消息通信。
		
	企业级消息代理
		JMS:即 Java 消息服务,是基于 JVM 消息代理的规范。而 ActiveMQ,HornetQ是一个 JMS 消息代理的实现。
		AMQP:一个消息代理的规范,但它不仅兼容 JMS,还支持跨语言和平台.AMQP 的主要实现有 RabbitMQ.
	Spring 的支持
	SpringBoot 的支持
	JMS 实战
	AMQP 实战

4.系统集成 SpringIntegration

SpringIntegration 快速入门

Message

Channel	
	顶级接口
		MessageChannel
		PollableChannel : 轮询
		SubscribaleChannel : 订阅
	常用消息通道
		PublishSubscribeChannel
		QueueChannel
		PriorityChannel
		RendezvousChannel
		DirectChannel
		ExecutorChannel
	通道拦截器
	
MessageEndPoint
	Channel Adapter : 
		通道适配器(Channel Adapter)是一种连接外部系统或者传输协议的端点(EndPoint),可以分为入站(inbound)和出站(outbound).
    	通道适配器是单向的,入站通道适配器只支持接收消息,出站通道适配器只支持输出消息.
	Gateway
		消息网关(Gateway) 类似与Adapter,但是提供了双向请求/返回集成方式,也分为入站(inbound)和出站(outbound).
	Service Activeator
		Service Activator 可调用Spring的Bean 来处理消息,并将处理后的结果输出到指定的消息通道.
	Router
		路由(Router)可根据消息体类型(Payload Type Router) 消息头的值(Header Value Router)以及定义好的
		接收表(Recipient List Router)作为条件,来决定消息传递到的通道.
	Filter
		过滤器(Filter) 类似于路由(Router),不通的是过滤器不决定消息路由到哪里,而是决定消息是否可以传递给消息通道.
	Splitter
		拆分起(Splitter)将消息拆分为几个部分单独处理,拆分器处理的返回值是一个集合或者数组.
	Aggregator
		据和气(Aggregator)与拆分器相反,它接收一个java.util.List作为参数,将多个消息合并为一个消息.
	Enricher
		当我们从外部获得消息后,需要增加额外的消息到已有的消息中,这时就需要使用消息增强器(Enricher).
    	消息增强器主要有消息体增强器(Payload Enricher)和消息头增强器(Header Enricher)两种
	Transformer
		转换器(Transformer)是对获得的消息进行一定的逻辑转换处理(如数据格式转换).
	Bridge
		使用连接桥(Bridge)可以简单地将两个消息通道连接起来
		
Spring Integration Java DSL

十.SpringBoot开发部署与测试

1.开发热部署

模板热部署
	在Spring Boot里,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,
	则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模板引擎的缓存.
    
     Thymeleaf : spring.thyeleaf.cache=false
     FreeMarker : spring.freemarker.cache=false
     Groovy : spring.groovy.cache=false
     Velocity : spring.velocity.cache=false
        
SpringLoaded
	SpringLoaded 可实现修改类文件的热部署
	
JRebel

Spring-boot-devtools

2.常规部署

jar 形式:
	打包 : mvn package
	运行 : java -jar xx.jar
	注册为 Linux 的服务

war 新式
	打包方式为 war 时 : mvn package
    打包方式为 jar 时 : jar 修改为 war    增加 ServletInitializer

3.云部署——基于 Docker 的部署

Dockerfile
	FROM 指令 :
		FROM指令指明了当前镜像继承的基镜像.
		编译当前镜像时会自动下载基镜像
		FROM ubuntu
		
	MAINTAINER 指令
		MAINTAINER指令指明了当前镜像的作者
		MAINTAINER name
		
	RUN 指令
		RUN指令可以在当前镜像上执行Linux命令并形成一个新的层.
		RUN是编译时(build)的动作
		RUN /bin/bash -c "echo helloworld"
		或
		RUN["/bin/bash","-c","echo hello"]
		
	CMD 指令
		CMD指令指明了启动那个镜像容器时的默认行为.
		一个Dockerfile里只能有一个CMD指令.
		CMD指令里设定的命令可以在运行镜像时使用参数覆盖.
		CMD echo "this is a test"
		可被 docker run -d image_name echo "this is not a test" 覆盖
		
	EXPOSE 指令
		EXPOSE 指明了镜像运行时的容器必须监听指定的端口.
		EXPOSE 8080
    
	ENV 指令
		ENV指令可用来设置环境变量
		ENV myName=name
		或 ENV myname name
		
	ADD 指令
		ADD指令是从当前工作目录复制文件到镜像目录中去
		ADD test.txt /mydir/
    
	ENTRYPOINT 指令
		ENTRYPOINT指令可让容器像一个可执行程序一样运行,这样镜像运行时可以像软件一样接口参数执行.
		ENTRYPOINT ["/bin/echo"]
		我们可以向镜像传递参数运行
		docker run -d image_name "this is not a test"
	
安装 Docker
	安装Docker
	yum install docker
	启动Docker 并保持开机启动
	systemctl start docker
	systemctl enable docker

项目目录及文件

编译镜像
	docker build -t wisely/ch10docker .
	wisely/ch10docker 为镜像名称,我们设置wisely作为前缀,这也是Docker镜像的一种命名习惯.
	注意,最后还有一个".",这是用来指明Dockerfile路径的,"."表示Dockerfile在当前路径下

运行
	docker run -d --name ch10 -p 8080:8080 wisely/ch10docker

4.SpringBoot 的测试

Spring Boot为我们提供了一个@SpringApplicationConfiguration来替代@ContextConfiguration,用来配置 Application Context.

十一.应用监控

Spring Boot 提供了运行时的应用监控和管理的功能.
我们可以通过http JMX SSH协议来进行操作.

*actuator  所有EndPoint的列表,需加入spring HATEOAS支持
* autoconfig 当前应用的所有自动配置
* beans 当前应用中所有Bean的信息
* configprops 当前应用中所有的配置属性
* dump 显示当前应用线程状态信息
* env 显示当前应用当前环境信息
* health 显示当前应用健康状况
* info 显示当前应用信息
* metrics 显示当前应用的各项指标信息
* mappings 显示所有的@RequestMapping映射的路径
* shutdown 关闭当前应用(默认关闭)
* trace 显示追踪信息(默认最新的http请求)

1.http

新建 SpringBoot 项目
	引入依赖 : web,actuator,hateoas

测试端点:
	actuator
	autoconfig
	beans
	dump
	configprops
	health
	info
	metrics
	mappings
	shutdown
		shutdown端点默认是关闭的,我们可以在application.properties中开启:
		endpoints.shutdown.enabled=true
		shutdown端点不支持GET提交,不可以直接在浏览器上访问地址,所以我们使用PostMan来测试
	trace
	
定制端点
	修改端点 id : endpoints.beans.id=mybeans
	开启端点 : endpoints.shutdown.enabled=true
	关闭端点 : endpoints.beans.enabled=false
	只开启所需端点 : 
		若只开启所需端点的话,我们可以通过关闭所有的端点,然后再开启所需端点来实现.
		endpoints.enabled=false
		endpoints.beans.enabled=true
	定制端点访问路径
		默认的端点访问路径是在根目录下的
		http://localhost:8080/beans
		management.context-path=/manage
		http://localhost:8080/manage/beans
	定制端点访问端口
		当我们基于安全的考虑,不暴露端点的端口到外部时,就需要应用本身的业务端口和端点锁用的端口使用不通的端口.
		我们可以通过如下配置改变端点访问的端口
		management.port=8081
	关闭 http 端点
		management.port=-1
        
自定义端点
	状态服务
	自定义端点
	注册端点并定义演示控制器
	
自定义 HealthIndicator

2.JMX

3.SSH

新建项目
运行
常用命令
定制登录用户
扩展命令

十二.分布式系统开发

微服务/原生云应用
	微服务(Microservice)是近两年来非常火的概念,它的含义是:使用定义好边界的小的独立组建来做好一件事情.
	微服务是相对于传统单块式架构而言的.

	单块架构是一份代码,部署和伸缩都是基于单个单元进行的.
	优点:易于部署
	缺点:可用性低,可伸缩性差,集中发布的声明周期,违反单一功能原则
	
SpringCloud 快速入门
	配置服务
	服务发现
	路由网关
	负载均衡
	断路由
	
实战:
	项目构建
	服务发现 Discovery(Eureka Server)
    配置 Config(ConfigServer)
    服务模块 Person 服务
    服务模块 some 服务
    界面模块UI(Ribbon,Feign)
    断路器监控 Minitor(DashBoard)
    运行

基于 Docker 部署
	Dockerfile编写
		runboot.sh 脚本的编写
			位于src/main/docker
			sleep 10
			java -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar
		Dockerfile 编写
			位于src/main/docker
            FROM java:8
            VOLUME /tmp
            RUN mkdir /app
            ADD config-1.0.0-SNAPSHOT.jar /app/app.jar
            ADD runboot.sh /app/
            RUN bash -c 'touch /app/app.jar'
            WORKDIR /app
            RUN chmod a+x runboot.sh
            EXPOSE 8888
            CMD /app/runboot.sh
            为不同的微服务我们只需要修改
            ADD config-1.0.0-SNAPSHOT.jar /app/app.jar
            以及端口
            EXPOSE 8888
		Docker 的 maven 插件
		编译镜像
	DockerCompose
	Docker-compose.yml 编写
	运行

你可能感兴趣的:(流行框架)