前面章节已经系统的讲解了Netty的基础知识,今天我们聊聊它与Springboot以及log4j的整合使用。Springboot作为当下Java生态里最流行的框架,必须整合,否则Netty的应用场景必然受限。好在spring设计精巧,兼容并包,有容乃大,Netty要与它整合不是难事。log4j作为Apache的开源项目,它提供了功能强大的日志组件,提供相当丰富且方便的日志API,Netty与它整合,也是轻而易举的事情。
与SpringBoot整合
引入依赖需要在项目中引入Springboot的依赖,使用的是2.0.3版本。首先引入父依赖
parent
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-parent/artifactId
version2.0.3.RELEASE/version
/parent
然后,引入使用的相关依赖
dependency
artifactIdspring-boot-configuration-processor/artifactId
optionaltrue/optional
/dependency
artifactIdspring-boot-autoconfigure/artifactId
引入依赖后,使用mvncleaninstall命令将依赖下载到本地,构建项目。
编写Springboot启动类
启动一个springboot项目,大家应该都是轻车熟路。写一个带
SpringBootApplication注解的启动类,在main方法里调用SpringApplication.run(XXX.class,args)就可以了。但我们除了启动springboot外,还得启动netty服务。这时候,就需要使用springboot的CommandLineRunner接口,要不,怎么说springboot设计精巧,兼容并包,有容乃大呢。各种需求基本上springboot都能有办法解决,这就是它的精妙之处。springboot会在容器初始化完成后,调用实现了CommandLineRunner接口的对象的run方法,执行一些用户任务,这些任务可以是根据需求定制的,比如读取配置文件,初始化连接等。类似还有ApplicationRunner接口也能实现这样的功能,两者的区别感兴趣的可以自行查阅资料学习。如果有多个类实现了CommandLineRunner或ApplicationRunner接口,有两种方法保证这些run方法的执行顺序。1、在实体类上使用Order注解,执行优先级是按value值从小到大顺序。2、实体类实现Order接口。SpringBootApplicationOrder(value=-2)publicclassNettyApplicationimplementsCommandLineRunner{
Overridepublicvoidrun(String...strings)throwsException{
EchoServerechoServer=newEchoServer();
echoServer.start();
}
publicstaticvoidmain(String[]args){
SpringApplication.run(NettyApplication.class,args);
}
当然,springboot本身也对log4j提供了支持,一般而言,我们直接使用springboot封装的log4j更加友好顺理成章。springboot的log4j的依赖如下:
artifactIdspring-boot-starter-logging/artifactId
artifactIdspring-boot-starter-log4j/artifactId
version1.3.8.RELEASE/version
这个使用很简单,如果不想使用springboot封装的log4j,想要选择原生的log4j也是可以的,那么可以引用如下的依赖:
groupIdlog4j/groupId
artifactIdlog4j/artifactId
version1.2.17/version
groupIdorg.slf4j/groupId
artifactIdslf4j-api/artifactId
version1.7.25/version
artifactIdslf4j-log4j12/artifactId
scopetest/scope
artifactIdslf4j-simple/artifactId
坚持原创,码字不易,有喜欢的朋友,麻烦点个