MENU

Keep It Stupid Simple

Spring Boot配置log4j

一般来情况下,无需切换日志实现;logback能很好地满足需求。如果必须切换到log4j,那么你只需要排除掉logback依赖,引入log4j的starter依赖。

排除spring-boot-starter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

增加log4j的starter依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

配置log4j.properties

log4j.rootLogger=INFO,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %p [%c] %m%n

以上为示例配置,请根据实际情况修改。

配置完毕,启动项目;此时控制台会输出INFO及以上级别的日志。

Read More

Java并发基础

Synchronized

synchronized关键字是用来控制线程同步的;可以加在代码块上,也可以加在方法上。

不使用synchronized

public class SynchronizedDemo {
    private int count = 10;
    public void m() {
        count--;
        System.out.println(Thread.currentThread().getName() + "->" + count);
    }

    public static void main(String[] args) {
        SynchronizedDemo sync = new SynchronizedDemo();
        for (int i = 0; i < 10; i++) {
            Thread thread = new Thread(sync::m, "thread" + i);
            thread.start();
        }
    }
}

执行结果:

thread0->8
thread2->7
thread1->8
thread3->6
thread4->5
thread5->4
thread6->3
thread7->2
thread8->1
thread9->0

synchronized语法

任何线程要执行代码块的代码,必须先拿到obj的锁:

public class SynchronizedDemo {
    private int count = 10;
    private final Object obj = new Object();

    public void m() {
        synchronized (obj) {
            count--;
            System.out.println(count);
        }
    }
}

Read More

Linux 上古神器之 sed

1.sed介绍

sed是stream editor(流编辑器)的简称,出生于1973年;不同于vim这类交互式编辑器,它没有编辑界面、快捷键和光标,只通过一次输入的编辑指令来处理输入流并输出结果,因此效率更高;另外,sed还能够过滤文本输出选定行。

sed一次处理一行内容,存储到一个临时缓冲区,即“模式空间”(pattern space),处理完成后输出到标注出,然后sed再获取下一行内容到模式空间处理,直到全部处理完成。

Read More