SpringBoot之Logback日志文件配置
概述Logback是一个日志框架,Logback和Log4j都是开源的日志工具库,Logback是Log4j的改良版本,内置实现了slf4j,比Log4j拥有更多的特性,性能也带来很大提升。SpringBoot默认内置了Logback日志框架,Spring Boot 集成logback需要添加 spring-boot-starter-logging 依赖,而此依赖已经在 spring-boot-starter 中添加过了,所以不用再添加此依赖了(如下图) :
Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG,优先级高的将被打印出来。(logback通用)通过定义级别,可以作为应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。(设置INFO级别,即:>=INFO 生效*
项目上生产环境的时候一定得把debug的日志级别重新调为warn或者更高,避免产生大量日志。
配置详解默认情况下,SpringBoot会用Logback来记录日志,并用INFO级别输出到控制台 ...
ElasticSearch学习
数据格式Elasticsearch 是面向文档型的数据库,一条数据在这里就是一个文档。es里面的概念和关系型数据库中的概念比对如下,可以依此进行理解:
索引操作创建索引对比关系型数据库,创建索引就等同于创建数据库。
在Postman中,向ES服务器发送put请求:http://localhost:9200/shopping
查询索引查询索引用的是get请求:
如果想查询当前ES所有的index(索引),怎么查呢?需要发送如下的get请求:
http://localhost:9200/_cat/indices?v
删除索引发送DELETE请求:http://localhost:9200/shopping
文档操作创建文档索引已经创建好了,接下来我们创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为JSON格式。
在Postman中,向ES服务器发送POST请求:http://localhost:9200/shopping/_doc
请求体内容为:
{ "titile": "小米手机", ...
面试专题一
Java并发篇相关演示代码地址:guyuexuan039/interview: 面试知识点汇总 (github.com)
一、Java如何开启线程?怎么保证线程安全?
首先说一下线程和进程的区别:进程是操作系统进行资源分配的最小单元;线程是操作系统进行任务分配的最小单元。线程隶属于进程。
如何开启线程?
1.继承 Thread类,重写run方法。
2.实现Runnable接口,实现run方法。
延伸到start方法和run方法的区别,调用start方法开启一个线程,而在start方法内部呢会调用run方法去实现一个线程的逻辑。而如果是我们主观地直接调用run方法,那就是一个普通的方法调用,并不会开启线程。
3.实现Callable接口,实现 call 方法。传统的Runnable和Thread的run方法是没有返回值的,如果你想返回一下线程的执行结果,就需要通过 Callable接口来实现。通过 FutureTask创建一个线程,获取到线程执行的返回值。
4.通过线程池来开启线程(不熟悉线程池的话就不要提这种方式)
怎么保证线程安全?
什 ...
BIO-NIO-AIO
java共支持三种网络编程模式:BIO,NIO,AIO三种IO模式适用场景
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发有局限性,JDK1.4以前是唯一的选择,好处是编码实现方式简单,且也容易理解。
NIO方式适用于连接数目多且连接比较段的架构,比如聊天服务器,弹幕系统等,相比BIO编码较复杂,JDK1.4以后开始支持。
AIO方式适用于连接数据多且连接较长的场景,比如相册服务器等,编程较复杂,JDK1.7才开始支持。目前好像并为得到广泛使用。
BIO(blocking I/O) 基本介绍Java BIO是传统的Java io编程,相关的类和接口在java.io包中Java BIO:同步阻塞,一个连接为一个线程,连接一个客户端就需要启动一个线程进行处理,如果连接未断开且未做任何事,会造会不必要的开销。可以通过线程池优化。Java BIO:适用于连接数目较小且相对固定的架构,对服务器的要求比较高,对并发有局限性。JDK1.4以前唯一的选择,简单易理解。
BIO的原理示意图
流程
服务器启动ServerSoket。
客户端启动Socket与服务器通信, ...
合并多个有序数组
public class JoinArray { public static void main(String[] args) { int[] a1 = {1, 3, 5, 7, 13}; int[] a2 = {2, 4, 6, 12, 14}; System.out.println(Arrays.toString(sort(a1, a2))); } public static int[] sort(int[] a, int[] b){ int[] c = new int[a.length + b.length]; int i = 0, j = 0, k = 0; while (i < a.length && j < b.length){ if (a[i] >= b[j]){ c[k++] = b[j ...
Tomcat如何快速部署war包程序
Tomcat 中如何部署war包这里我使用最快速的一种方式,即通过修改 conf/server.xml 文件来实现
<Context docBase="/home/xiaohua/my-app/yaoqishan" path="/" debug="0" reloadable="false"/>
在 server.xml 最下面添加如上一行代码即可成功实现将 yaoqishan.war 包部署到 tomcat 中,启动 tomcat ,访问 http://localhost:8080/ 即可访问成功。之后每次修复bug后,只需要将你的war包上传到 /home/xiaohua/my-app/yaoqishan 目录下替换掉原有的war包即可。
若是在 windows 环境下,只需要修改如上代码为:
<Context docBase="E:/github-project/yaoqishan/target/yaoqishan" path="/" deb ...
Intellij IDEA 常用功能
Tab 页在 intellij idea 中,直接使用快捷键 ctrl+e 来找到最近访问过的文件;使用 ctrl+shift+e 来访问最近编辑过的文件。
跳到特定的文件夹在intellij idea 中,可以输入 /文件夹名 来跳到特定的文件夹(使用double shift快捷键)。
快速补全行末分号Java 中,每一条语句的末尾都得加上 ; 号,我们可以在行中任意位置使用快捷键 ctrl+shift+enter 来快速补全分号。
Rest Clientintellij idea 中内置了一个 rest client,可以通过 ctrl+shift+a 调出面板,然后搜索 rest client 来找到,打开以后可以看到一个简单的 rest client。之所以说它比较简单是因为觉得还是 postman 更加强大,相比之下, rest client 则要显得逊色得多。
粘贴板历史选择直接通过快捷键 ctrl+shift+v 来访问历史 粘贴板。
Language Injection大家都知道在 Java 的 String 中编辑有 JSON 的话有多麻烦,各种转义真是让人疯狂,在 ...
Facebook-China数据
最近facebook被爆出数据泄露问题,其中泄露的数据中有67万的来自中国用户的数据,最关键的是竟然有他们的个人电话号码,以下只是一部分数据展示。
8618723339660:100020533532418:Ann:Liao:female:Chongqing, China:Chongqing, China::Chongqing Deron Instrument Manufacture Co. Ltd.:11/29/2018 12:00:00 AM::8618723344582:100028514810622:Miko:Benrekia:female:Sydney, Australia::::9/17/2018 12:00:00 AM::8618723345781:100026527711167:为:任:male:::::10/22/2018 12:00:00 AM::8618723352795:100010290875851:Mina:Somerhalder:female:Chongqing, China:Chongqing, China:::5/13/2018 12:00:00 ...
Spring AOP学习(二)
前言我们通常在实际开发中有这样的需求场景:我需要在不改动原先的业务代码场景下,实现一些额外的功能,比如我计算一下执行某些代码耗时多久啊,我增加一些额外的日志输出啊,等等。。。那么我们怎么实现呢?这个时候就可以用到我们的 AOP 了。而 AOP 的切面呢,可以是某个类下面的某个方法,也可以是某个包下面的所有方法,还可以是凡是使用到某个注解的地方等,下面呢我们就让 AOP 去切凡是使用了某个注解的地方
定义注解package com.example.springaopdemo.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface CalculateExec ...
Redis主从哨兵配置
这里由于时间紧张,我就暂时先把自己配置的过程做成截图放在这里供大家使用,之后有时间我会来完善这篇文章的,非常抱歉。