4 springmvc初始化异常解析器HandlerExceptionResolver
1. 目录[TOC] 2. 说明异常解析器在发生异常的时候解析组装异常返回 3. 依赖分析4. 源码分析初始化异常解析器依然是在DispatchServlet#initStrategies()中完成的,方法为initHandlerExceptionResolvers() 4.1. initHandlerExceptionResolvers()和前面一样,当配置<mvc:annotation-driven>的时候会加载默认,没有配置注解驱动,查询出来为空, 则会走后面getDefaultStrategies() 123456789101112131415161718192021222324252627282930313233private void initHandlerExceptionResolvers(ApplicationContext context) { this.handlerExceptionResolvers = null; if (this.detectAllHandlerExceptionResolvers) { ...
1 springmvc启动流程
1. 目录[TOC] 2. 说明本文分析springmvc的启动过程,spring的启动前面已经分析了,此处就默认spring启动流程已经OK 3. 流程分析 首先spring通过 ContextLoaderListener实现tomcat调用的javax.util.EventListener.ServletContextListener来启动spring容器ApplicationContext 启动完成后继续执行tomcat的方法 然后 springmvc 通过 DispatcherServlet实现tomcat 的HttpServlet来启动spring-mvc的容器ApplicationContext,初始化完成之前会创建初始化完成事件监听器, springmvc监听事件,容器初始化后执行监听方法,初始化springmvc的九大组件 4. 源码分析4.1. spring...
2 springmvc初始化请求映射器handlerMappiings
1. 目录[TOC] 2. 说明请求映射器主要是将url映射成应用中的执行对象,一般我们项目中是通过RequestMappingHandlerMapping映射Controller 3. 依赖分析4. 源码分析从springmvc启动流程可以知道,springmvc请求映射是在initHandlerMappings()中初始化的 4.1. initHandlerMappings()1234567891011121314151617181920212223242526272829303132333435private void initHandlerMappings(ApplicationContext context) { this.handlerMappings = null; //是否检测容器中的bean,默认为true if (this.detectAllHandlerMappings) { ...
gitee使用自动部署
1. 开通开通gitgo 就行了,会有每个月2000分钟的免费时长,够用的了 选择创建分支,默认创建三个分支 2. 配置以master为例 默认有编译和发布两个流程 2.1. maven构建流程 名称和jdk版本一般不用管 暂存构建物,这里默认 私有仓库这里看是否用了自己的私有仓库,若有则需要添加配置,无则不管私有仓库这,第一次点击添加证书, 跳转之后点击创建凭证 选择Maven Settins 补全信息,这里主要是输入好maven仓库的地址和访问maven的账号密码,仓库作用域选择好需要部署的工程 回到流水线maven配置这里,将添加好的私有仓库选中,就可以了 构建缓存这里不选也不影响啥 2.2. 上传制品上传制品这里主要选择上传文件,选择上一步maven构建中的暂存构建物唯一标识,制品名称为工程名称,后续打包会以此打成压缩包 2.3. 发布发布主要是增加工程版本,生成tag等,这里可以不用 2.4. 主机部署主机部署主要需要选择好执行的主机组,配置好部署脚本 2.4.1. 添加主机在任务信息 -> 执行主机组...
6-SpringCloudGateway 自定义路由
1. 序言除了使用官方给的配置文件配置路由,我们也可以自己在代码中配置路由功能 2. 实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859@Configurationpublic class RouteConfig { @Autowired ProviderServiceGatewayFilterFactory providerServiceGatewayFilterFactory; /** * 代码配置路由 */ @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() /* uri: http://example.com ...
5-SpringCloudGateway 自定义断言器
1. 序言除了自定义过滤器,官方也开放了断言扩展,可以自定义断言器 2. 实现2.1. java代码实现接口AbstractRoutePredicateFactory 123456789101112131415161718192021222324252627282930313233@Component@Slf4jpublic class TenantRoutePredicateFactory extends AbstractRoutePredicateFactory<TenantRoutePredicateFactory.Config> { public TenantRoutePredicateFactory() { super(Config.class); } @Override public Predicate<ServerWebExchange> apply(Config config) { return new GatewayPredicate()...
4-SpringCloudGateway 自定义过滤器
1. 序言基本上gateway自带的过滤器都能满足我们的使用,除了使用自带的,我们也可以自定义过滤器实现自己的逻辑 2. 工程搭建基本步骤不变,只是在配置环节有不一样 3. 全局过滤器全局过滤器只需要实现GlobalFilter即可,所有的请求都会走此过滤器,用于做全局的事件处理,如权限验证、日志记录、租户校验等…… 12345678910111213141516171819@Componentpublic class LogGlobalFilter implements GlobalFilter { private static final Logger logger = LoggerFactory.getLogger(RuntimeException.class); @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { StopWatch watch = new...
3-SpringCloudGateway 路由配置
1. 序言Gateway配置文件非常强大,基本已经包含了大部分的使用场景,我们一般直接通过配置文件就可以完成配置了 2. 开启根据微服务名转发1spring.cloud.gateway.discovery.locator.enabled=true 开启此配置后会根据链接的path第一层寻找对应的微服务名,并且转发后会将第一层微服务名给去掉,保留后面的内容发给后续应用,如: provider注册的服务名为CloudGatewayProvider,提供的服务路径为/providerController/hello,自身的servlet.context-path为/cloud-provider,如图: nacos controller application.yml 通过访问以下路径可以得到provider数据,类似于nginx的转发重写功能 1localhost:8101/CloudGatewayProvider/cloud-provider/providerController/hello 3. 手动配置路由映射此种方式手动配置路由映射,如: 12345678spring: ...
2-SpringCloudGateway 工程搭建
1. 序言2. 搭建2.1. gateway本体项目2.1.1. pom本项目的版本均基于SpringCloud Hoxton.SR9 和SpringCloudalibaba 1234567891011121314151617<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR9</version> <type>pom</type> <scope>import</scope></dependency><!--************spring-cloud相关************--><!--整合spring cloud alibaba--><dependency> ...
1-SpringCloudGateway开篇
1. 序言引用 1.1. 背景微服务架构中,通常一个系统会被拆分为多个微服务,面对这么多微服务客户端应该如何去调用呢?如果没有其他更优方法,我们只能记录每个微服务对应的地址,分别去调用,但是这样会有很多的问题和潜在因素。 客户端多次请求不同的微服务,会增加客户端代码和配置的复杂性,维护成本比价高。 认证复杂,每个微服务可能存在不同的认证方式,客户端去调用,要去适配不同的认证, 存在跨域的请求,调用链有一定的相对复杂性(防火墙 / 浏览器不友好的协议)。 难以重构,随着项目的迭代,可能需要重新划分微服务 为了解决上面的问题,微服务引入了 网关 的概念,网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。 1.2. 网关在微服务中的位置 1.2.1. 网关对比 Zuul...
