Skip to content

Instantly share code, notes, and snippets.

@wutingjia
wutingjia / Java IO流总结.txt
Last active January 1, 2019 12:10
Java IO流总结
最基本的输入流为InputStream 表示从不同数据源输入的类。因此根据不同的数据源就有不同的子类。
类 对应数据源 构造器参数
1)ByteArrayInputStream 字节数组 缓冲区,字节从内存缓冲区中取出
2)StringBufferInputStream String对象 字符串,底层使用StringBUffer
3)FileInputStream 文件 字符串,表示文件名(路径)
4)PipedInputStream 管道概念 PipedOutputStream
5)SequenceInputStream 多个InputStream 两个InputStream或一个InputStream的容器Enumeration
6)FilterInputStream 抽象类,装饰器的接口 以上其他InputStream
@wutingjia
wutingjia / 在windows中部署zookeeper的伪集群.md
Last active January 16, 2019 13:07
在windows中部署zookeeper的伪集群

首先在网站上下载zookeeper的tar包,并且解压。 重命名\conf 目录下的 zoo-example.cfg 为 zoo.cfg。 对其中进行设置,例如:

  clientPort=2181
  
  dataDir=D:\\zookeeper-3.4.10-1\\data
  
 server.1=127.0.0.1:2222:2223
@wutingjia
wutingjia / 微服务概念.md
Last active January 20, 2019 04:33
微服务概念

云计算有三种基本模式:

基础设施即服务(Infrastructure as a Service,IaaS); 平台即服务(Platform as a Service,PaaS); 软件即服务(Software as a Service,SaaS)

每种服务的区别在于本身能掌控的多少,以上是逐渐递减的。

微服务核心概念之一是:每个服务被单独的打包与部署,服务实例应该迅速启动,同一个微服务的每个实例应该完全相同。

@wutingjia
wutingjia / Spring-Cloud-Netflix-Hystrix.md
Last active April 2, 2019 11:29
Spring-Cloud-Netflix-Hystrix

需要导入的依赖

org.springframework.cloud spring-cloud-starter-hystrix

在引导类添加注解 @EnableCircuitBreaker 如果不添加,不会收到警告和错误信息,但是断路器不起作用。

断路器模式

@HystrixCommand 方法级注解。 Spring框架会将 该注解 标记的方法进行包装为命令。将使用新的线程池对其进行调用。往往是对远程调用或者数据库操作的方法进行注解。

@wutingjia
wutingjia / Spring-Cloud-Config(本地文件系统配置).md
Last active February 28, 2019 01:07
Spring-Cloud-Config(本地文件系统配置)

Spring-Cloud-Config 提供在分布式系统中客户端与服务端的外部配置支持。在Config Server端 你可以有一个集中的地方存放与管理其他所有服务的外部配置。
其依赖为 spring-cloud-starter-config,服务端依赖为 spring-cloud-config-server. 客户端依赖为 spring-cloud-config-client.

1、应用程序配置文件的命名约定{application}-{profile}.yml。
2、config-server本身也是一个微服务,在它的启动类上使用注解@EnableConfigServer。
3、在微服务(配置服务端)的配置文件(bootstrap)中的关键配置:
每次更改完记得重启服务器

spring:  
  profiles:  
@wutingjia
wutingjia / 集中式日志分析方案.md
Last active July 28, 2021 01:38
集中式日志分析方案

使用技术:Filebeat + kafka + logstash + elasticsearch + kibana
(日志采集) (传输) (数据收集整理) (数据存储搜索分析) (数据分析可视化)

Logger

这里使用slf4j+logback的组合,首先需要注意是否与某些依赖继承的log4j冲突,需要把它exculusion,如果存在,slf4j会报找到多个binding的实现,然后会自己选取一种。
slf4J 是 简单日志门面(simple logger facade),并没有具体的日志实现,只提供一组接口,这样用户就无需,因为不同的底层实现而编写不同的代码。
首先需要依赖logback-classic和slf4j-api。如果使用的是log4j还需要slf4j-log4j12 作为连接。
对于logback其配置文件为resource下的logback.xml。
配置例如:

<logger name="ELKLogger" level="DEBUG" additivity="true">
@wutingjia
wutingjia / Spring装配Bean.md
Last active February 6, 2019 12:10
Spring装配Bean

自动化装配bean

@Component 类级注解 表明该类是一个组件类,将它识别为一个bean,需要通过开启组建扫描才能发现。
对于@Component注解的bean的名字,默认是驼峰,可以是使用@Component("xxx")指定名称

可以专门创建一个配置类,该类有注解 @Configuration 引导类启动会先去加载配置类;@ComponentScan 开启组件扫描,默认扫描与配置类相同的包,查找带有@Component的类
@ComponentScan("xxx")value属性指定包的名称,多个包可以用@ComponentScan(basepackages={"xxx","xxx"})。但是字符串没有编译器检查,@ComponentScan(basepackages={aaa.class,bbb.class}),aaa与bbb两个类所在的包会作为被扫描的包。

将bean注入 可以在属性或者方法上使用@Autowired,如果是方法自动传入参数

java代码装配bean

@wutingjia
wutingjia / Spring切面.md
Last active April 2, 2019 13:47
Spring切面

AOP术语

通知(Advice)
定义了 切面是什么以及何时使用。有五种类型的通知Before、After、After-returning、After-throwing、Around。
连接点(Join point)
定义了 应用 通知 的时机。是在应用执行过程中能够插入切面的一个点。 切点(Pointcut)
定义了 何处。匹配 通知 所要 织入 的一个或多个 链接点。
切面(Aspect)
切面是通知和切点的结合。
引入(Introduction)

@wutingjia
wutingjia / SAXReader.md
Created February 22, 2019 10:35
SAXReader

是一个用来读写xml的api,需要导入dom4j-full.jar。
示例代码:

SAXReader saxReader = new SAXReader(); //简单的创建方式,也可通过工厂获取
FIle file=new File("xx.xml");
Document doc=saxREadser.read(new FileInputStream(xmlFile));//read方法可以接受各种常用的流,比如字节流
List nodes=doc.selectNodes("/data/node1");//可以直接返回指定节点
Element rootElement=doc.getRootElement();//获取报文的根节点
List elements=doc.getRootElement().elements();//获取报文的根节点之下一层的所有节点
Element element=doc.getRootElement().elements().get(0);//获取报文的根节点之下一层的所有节点中的第一个节点。
@wutingjia
wutingjia / mockServer.md
Last active February 22, 2019 11:58
mockServer

对于http协议和tcp协议分别在两个不同的端口进行监听。
在rpc调用的方法中,包装一层发送到mock的地址,其boolean值可以配置在application.yml中方便切换,在代码中使用${}占位符进行注入。

HTTP

//@RestController 层

@PostMapping(path="/mock/**")
	public String mockHttp(@RequestBody String body,@RequestHeader Map<String, String> header) {
		return getRes(body, header, "", "");
	}