Java EE

高级java开发必须掌握的Spring接口——SmartLifecycle

て烟熏妆下的殇ゞ 提交于 2020-10-01 05:08:26
有些场景我们需要在Spring 所有的bean 完成初始化后紧接着执行一些任务或者启动需要的异步服务。常见有几种解决方案 j2ee 注解 启动前@PostConstruct 销毁前@PreDestroy 基于j2ee 规范 springboot 的 org.springframework.boot.CommandLineRunner springboot 特性前面我已经介绍过了 spring org.springframework.context.SmartLifecycle 这里介绍一下第三种 SmartLifecycle SmartLifecycle 不仅仅能在初始化后执行一个逻辑,还能再关闭前执行一个逻辑,比如你一个服务在启动时向服务注册发现中心发一个信号告诉它服务上线了,下线前通知它你下线了。也就是实现了一个 从生到死 的轮回。 话不多说先实现一个SmartLifeCycle 我们发现实现类需要实现3个方法,但是这3个方法并不是 SmartLifecycle 的方法而是 org.springframework.context.Lifecycle 的方法: void start() 我们主要在该方法中启动任务或者其他异步服务,比如开启MQ接收消息当上下文被刷新(所有对象已被实例化和初始化之后)时,将调用该方法,默认生命周期

好用的内网穿透工具合集

喜你入骨 提交于 2020-10-01 03:16:00
本文转载自微信公众号「Bypass 」,作者Bypass 。转载本文请联系Bypass公众号。 在***过程中,我们需要快速实现内网穿透,从而绕过网络访问限制,直接从外网来访问内网。今天,我们来推荐几款非常好用的内网穿透工具,如有其它推荐,欢迎补充和指正。 1、ngrok ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。 官网地址: https://ngrok.com 使用步骤: (1)进入ngrok官网注册账号,并下载ngrok。 (2)在目标机器上,填写授权码,运行ngrok。 ./ngrok authtoken 授权码 (3)将HTTP隧道转发到本地端口80,如下图,通过外网域名即可访问到本地80端口。 ./ngrok http 80 2、frp frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。 git项目地址: https://github.com/fatedier/frp 使用步骤: (1)将 frps 及 frps.ini 放到有公网 IP 的机器上,修改frps.ini文件,配置一个名为ssh的反向代理: # frps.ini [common] bind_port = 7000 [ssh]

Spring Boot 竟然能够通过CORS来实现跨域?

元气小坏坏 提交于 2020-09-30 21:47:44
1.同源策略 很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略。 同源策略是由 Netscape 提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是 JSONP,JSONP 虽然能解决跨域但是有一个很大的局限性,那就是只支持 GET 请求,不支持其他类型的请求,而今天我们说的 CORS(跨域源资源共享)(CORS,Cross-origin resource sharing)是一个 W3C 标准,它是一份浏览器技术的规范,提供了 Web 服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略,这是 JSONP 模式的现代版。 2.实践 首先,我们新建两个工程: 新建工程一:cors1 project 勾选Web模块 因为我们等下需要通过web接口进行测试 点击Finish完成构建 在cors1 中 我们新建一个HelloController,写上一个测试接口: @RestController public class HelloController { @GetMapping("

膜拜!腾讯顶配SpringBoot进阶宝典,完美贴合开发实际

旧巷老猫 提交于 2020-09-30 16:07:44
前言 在过去的几年时间里,最让人兴奋、回头率最高、最能改变游戏规则的东西,大概就是SpringBoot了。它基于约定大于配置原则,甚至有望能够在蓬勃发展的快速应用开发领域成为其领导者。 目前JAVAEE应用体系中繁重的配置、低下的开发效率、高难度的三方集成, 复杂的部署流程等等一直被开发人员所诟病。随着整个架构体系的变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。因而Springboot这个技术显得尤为重要。 能学好Springboot肯定是能在自己的求职简历上添上一个亮点。学习的过程中有一本好的工具书作为参考其实也是尤为重要的。下面我要介绍的这份 腾讯内部Springboot进阶文档 就用大量的篇幅对比讲解多种同类技术的知识点、使用和区别,大家可以根据自己的喜好进行技术选型;还 讲解了时下流行的接口架构风格RESTful,以及用来实现高并发的Redis和系统间通信的中间件RabbitMQ 最后更是融合了所讲的全部知识点,讲解了两个常用又实用的实战项目。 篇幅限制只能将重点内容展示出来了,需要这份腾讯SpringBoot文档的朋友,获取方式在文末!!! 入门篇 初识Spring Boot 准备开发环境 搭建环境 熟悉Maven 使用开发工具 安装开发工具IDEA及插件 比较IDEA与Eclipse 基础篇

Spring全家桶太难了?看美团架构师详解Spring全家桶:原理笔记+面试真题

一个人想着一个人 提交于 2020-09-30 00:51:18
Spring入门到精通 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 Spring框架自诞生以来一直备受开发者青睐,今天在这里分享的是一套Spring全家桶集合。其中包括了Spring、SpringBoot、SpringCloud、SpringMVC四个实战文档,以及Spring面试文档,都是经过BAT实战精选过的重点内容。 第一部分 Spring架构分析 第1章 Spring启程 第2章 安装和构建Spring 第3章 控制反转(Spring IoC) 第4章 面向方面编程(Spring AOP) 第5章 深入Spring架构 第二部分 Spring应用开发 第6章 命名服务——JNDI 第7章 事务服务——JTA 第8章 消息服务——JMS 第9章 邮件服务——JavaMail 第10章 企业Bean服务——EJB 第11章 持久化服务——DAO、JDBC、ORM 第12章 任务调度服务——Quartz、Timer 第13章 远程服务

硬核!学会SpringMVC从这篇开始

☆樱花仙子☆ 提交于 2020-09-29 16:49:44
本文转载自微信公众号「小菜良记」,作者蔡不菜丶 。转载本文请联系小菜良记公众号。 SpringMVC概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。 支持 REST 风格的 URL 请求 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性 SpringMVC简单使用 1)在 web.xml 中配置 DispatcherServlet: <!-- 配置 DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 --> <!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的.

【Java】整合SSM框架

ぃ、小莉子 提交于 2020-09-29 11:45:33
环境   IDE:IntelliJ IDEA 2017.1   DB:MySQL 步骤 创建项目 New Project → Maven(maven -archetype -webapp )→ GroupId( cn . test . project) | ArtifactId(project -ssm ) → Next → 设置Maven,Next → Project name(project -ssm ) → Finish 项目目录 引入jar包 <!-- spring版本号 --> < spring.version > 5.0.8.RELEASE </ spring.version > <!-- mybatis版本号 --> < mybatis.version > 3.4.6 </ mybatis.version > <!-- mysql驱动版本号 --> < mysql-driver.version > 5.1.29 </ mysql-driver.version > <!-- spring核心依赖 --> < dependency > < groupId > org.springframework </ groupId > < artifactId > spring-core </ artifactId > < version > ${spring.version} </

RabbitMQ学习小结---五种队列模式

左心房为你撑大大i 提交于 2020-09-29 08:40:20
1.RabbitMQ概述 简介 : MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法; RabbitMQ是开源的,实现了AMQP协议的,采用Erlang(面向并发编程语言)编写的,可复用的企业级消息系统; AMQP(高级消息队列协议)是网络协议,是一个异步消息传递所使用应用层协议规范 ,为面向消息中间件设计,基于此协议的客户端与消息中间件可以无视消息来源传递消息,不受客户端、消息中间件、不同的开发语言环境等条件的限制; 支持主流操作系统:Linux、Windows,MacOX等; 支持多种客户端开发语言:Java、Python、Ruby、.NET,PHP、C/C++、Node.js等 术语说明 : Server(Broker):接收客户端连接,实现AMQP协议的消息队列和路由功能的进程; Virtual Host:虚拟主机的概念,类似权限控制组,一个Virtual Host里可以有多个Exchange和Queue,权限控制的最小力度是Virtual Host; Exchange:交换机,接收生产者发送的消息,并根据 Routing Key ;路由关键字,将消息路由到服务器中的队列Queue 。 ExchangeType:交换机类型决定了路由消息行为,RabbitMQ中常用有三种类型Exchange,分别是fanout、direct、topic、

JAVA WEB DAY 01_Tomcat & Servlet

冷暖自知 提交于 2020-09-28 19:47:30
文章目录 Tomcat 服务器与 Servlet 目标 01 软件架构 [★] 02 web资源概述[★] 03 web服务器概述[★★] 03_01 常见web服务器 04 模拟一个 web 服务器[★] 05 Tomcat 启动和关闭[★★★] 06 Tomcat 目录结构[★★] 07 Tomcat 启动时常见问题[★★★] 08 Tomcat项目的发布方式[★★★★] 08_01 方式1:webapps 08_02 方式2:虚拟目录 08_03 方式3:配置独立xml文件 09 IDEA 中配置和启动 Tomcat[★★] 10 Servlet 概述和开发步骤[★★★★] 10_01 Servlet(Server Applet): 10_02 Servlet 的作用: 10_03 Servlet 的开发步骤: 11 Servlet 入门案例-配置文件方式[★★★] 12 Servlet 入门案例-注解配置方法[★★★★] 13 Servlet 生命周期[★★] 13_01 Servlet 运行过程: 13_02 Servlet 生命周期相关方法 14 Servlet 运行原理[★★] 14_01 XML 配置运行原理[★] 14_01_01 Servlet的运行原理 14_02 注解配置运行原理[★★] 15 创建 Servlet 之继承 HttpServlet[★★★]

关于 Mybatis 缓存的那点事儿,你知道吗?

半城伤御伤魂 提交于 2020-09-28 13:35:02
缓存实现的方式 一级缓存 二级缓存 案例实操 1. 一级缓存 基于 PerpetualCache 的 HashMap 本地缓存(mybatis 内部实现 cache 接口),其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空; 2. 二级缓存 一级缓存其机制相同,默认也是采用 PerpetualCache 的 HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache; 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行了 C/R/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。 如果二缓存开启,首先从二级缓存查询数据,如果二级缓存有则从二级缓存中获取数据,如果二级缓存没有,从一级缓存找是否有缓存数据,如果一级缓存没有,查询数据库 。 3. 二级缓存局限性 mybatis 二级缓存对细粒度的数据级别的缓存实现不好,对同时缓存较多条数据的缓存,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用 mybatis 的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为