1.springboot安装及配置?
springboot安装及配置?
SpringBoot教程第篇:整合elk,搭建实时日志平台
这篇文章主要介绍springboot整合elk.
elk简介
elk下载安装
elk下载地址:
建议在linux上运行,elk在windows上支持得不好,另外需要jdk1.8的支持,需要提前安装好jdk.
下载完之后:安装,以logstash为栗子:
配置、mac 源码安装jdk启动Elasticsearch
打开Elasticsearch的配置文件:
修改配置:
network.host=localhost
network.port=
它默认就是这个配置,没有特殊要求,在本地不需要修改。
启动Elasticsearch
启动成功,访问localhost:,网页显示:
配置、启动logstash
在logstash的主目录下:
修改log4j_to_es.conf如下:
input{
log4j{
mode="server"
host="localhost"
port=
}
}
filter{
#Onlymatcheddataaresendtooutput.
}
output{
elasticsearch{
action="index"#TheoperationonES
hosts="localhost:"#ElasticSearchhost,canbearray.
index="applog"#Theindextowritedatato.
}
}
修改完配置后启动:
./bin/logstash-fconfig/log4j_to_es.conf
终端显示如下:
访问localhost:
证明logstash启动成功。
配置、启动kibana
到kibana的安装目录:
默认配置即可。
访问localhost:,网页显示:
证明启动成功。
创建springboot工程
起步依赖如下:
log4j的配置,/src/resources/log4j.properties如下:
log4j.rootLogger=INFO,console
#forpackagecom.demo.elk,logwouldbesenttosocketappender.
log4j.logger.com.forezp=DEBUG,socket
#appendersocket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d[%-5p][%l]%m%n
log4j.appender.socket.ReconnectionDelay=
#appenderconsole
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d[%-5p][%l]%m%n
打印log测试:
在kibana实时监控日志
打开localhost::
Management=indexpattrns=addnew:
点击discovery:
springboot配置文件总结
springboot本身支持多种灵活的配置方式,为开发springboot程序带来了很大的灵活性和扩展性,但是同时由于太灵活,经常会导致明明配置了相关属性,计步器源码登录界面却没有生效。
本文总结了springboot配置文件的原理以及多个配置文件生效的顺序。
springboot配置文件支持灵活的路径,以及灵活的文件名,用一个变量表达式总结如下:
部分源码如下:
当满足上述变量表达式的配置文件有多个时,会有一个配置的优先级。假设
上面每个条件组合起来,则最多有配置文件如下,且顺序从上到下:
获取属性时,按从上到下的顺序遍历由上述文件生成的属性资源对象PropertySource,如果遇到匹配的key直接返回。
总结一下:就是如果同一个key的属性只出现一次,则直接取该值即可。如果同一个key的属性出现多次,则取顺序靠前的属性资源对象。另外其中每个文件都是可选的。
需要注意的一点是:如果在同一个location下配置了多个文件名一样的文件,则只会取一个,比如在classpath:/,有如下两个文件application.yml:
则只会根据classloader的校园博客html源码classpath列表,选取第一个出现的文件。因为springboot加载配置文件时最底层是使用的下面的方法:
这两个方法只会获取classloader类的ucp属性里面第一个匹配到的值。如果对springboot自身的机制不满意,想获取所有的classpath:/路径下面的applicaiton.yml文件,可以使用下面的方法:
本文总结了springboot配置文件的原理以及多个配置文件生效的顺序。如果存在增加了配置文件或者在配置文件里面增加了属性却没有生效,可以参考上面的springboot配置文件表达式和配置文件生效顺序进行排查。
后面还会有一篇文章讨论基于springboot配置原理如何实现自定义的配置读取方式。
springboot插件安装(JBLSpringBootAppGen)插件安装
在应用springboot工程的时候;一般情况下都需要创建启动引导类Application.java和application.yml配置文件,而且内容都是一样的;为了便捷可以安装一个IDEA的插件JBLSpringBootAppGen在项目上右击之后可以自动生成启动引导类Application.java和application.yml配置文件。
使用
新建任意一个maven工程,右击工程,选择JBLSpringBootAppGen
是否添加application.properties文件
点击OK,工具会自动帮忙创建
SpringBoot配置文件详解(告别XML)快速学会和掌握SpringBoot的核心配置文件的使用。
SpringBoot提供了丰富的外部配置,常见的有:
其中核心配置文件我们并不陌生,主要以Key-Value的形式进行配置,其中属性Key主要分为两种:
在application.properties添加配置如下:
①添加数据源信息
在application.propertis添加配置如下:
①添加认证信息,其中socks.indentity.*是自定义的属性前缀。
②添加随机值,ps css源码展现其中spring.test.*是自定义的属性前缀。
使用方法:@ConfigurationProperties(prefix="spring.datasource")
使用说明:提供Setter方法和标记组件Component
如何验证是否成功读取配置?答:这里可以简单做个验证,注入MyDataSource,使用Debug模式可以看到如下信息:
使用方法:@Value("spring.datasource.*")
使用说明:提供Setter方法和标记组件Component
注意事项:@Value不支持注入静态变量,可间接通过Setter注入来实现。
关于两者的简单功能对比:
显然,前者支持松绑定的特性更强大,所以在实际开发中建议使用@ConfigurationProperties来读取自定义属性。
SpringBoot默认会加载这些路径加载核心配置文件,按优先级从高到低进行排列:具体规则详见ConfigFileApplicationListener
如果存在多个配置文件,则严格按照优先级进行覆盖,最高者胜出:
举个简单的例子,例如再上述位置都有一个application.properties,并且每个文件都写入了server.port=xx(xx分别是,,,),在启动成功之后,最终应用的端口为:。图例:
如果想修改默认的电源源码模板加载路径或者调改默认的配置文件名,我们可以借助命令行参数进行指定,例如:
YAML是JSON的一个超集,是一种可轻松定义层次结构的数据格式。
答:因为配置文件这东西,结构化越早接触越规范越好。这里推荐阅读阮一峰老师写的YAML语言教程,写的很简单明了。
引入依赖:在POM文件引入snakeyaml的依赖。
使用说明:直接在类路径添加application.yml即可。
例如下面这两段配置是完全等价的:
①在application.yml配置数据源:
②在application.properties配置数据源:
在项目的实际开发中,我们往往需要根据不同的环境来加载不同的配置文件。例如生产环境,测试环境和开发环境等。此时,我们可以借助Profiles来指定加载哪些配置文件。例如:
温馨提示:如果spring.profiles.active指定了多个配置文件,则按顺序加载,其中最后的优先级最高,也就是最后的会覆盖前者。
使用方法:
使用Maven插件打包好项目,然后在当前路径,执行DOS命令:java-jardemo.jar--server.port=,在控制台可看到应用端口变成了。
实现原理:
默认情况下,SpringBoot会将这些命令行参数转化成一个Property,并将其添加到Environment上下文。
温馨提示:
由于命令行参数优先级非常之高,基本高于所有常见的外部配置,所以使用的时候要谨慎。详见PropertySource执行顺序。
关闭方法:
如果想禁用命令行属性,可以设置如下操作:springApplication.setAddCommandLineProperties(false)
Springboot配置logback因为logback其他配置尚好理解,本文只说明比较少用,但是却起关键作用的两个子节点。
1、依赖:
实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,SpringBoot为我们提供了很多默认的日志配置,所以,只要将spring-boot-starter-logging作为依赖加入到当前应用的classpath,则“开箱即用”。
2、日记的等级
日志级别从低到高分为TRACEDEBUGINFOWARNERRORFATAL
3、配置
这里对日志框架的支持有两种配置方式,一般来讲我们倘若不是要较复杂的需求,可以直接在?application.yml?配置文件配置下即可:
application.properties或?application.yml?(系统层面)
参考网站:
logback-spring.xml?(自定义文件方式)
参考网站:
4、彩色打印
参考:
5、@Slf4j注解
安装lombok插件,在需要打印的类名上加上该注解即可
替代下面语句的编写
privateLoggerlogger=LoggerFactory.getLogger(this.getClass());
6、打印不出json的问题
不是打印不出而是正确的要加一个占位符{ },如下
log.info("hospital{ }",JSON.toJSONString(hospitalEntity2));
7、log存放文件路径定义
最关键的两个节点,你可以理解之前的property、appender嵌套property只是一些定义好的变量,真正定义方法怎么去运用这些变量是这两个节点所要做的。
1、子节点--root
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性,不区分大小写,默认是DEBUG。
可以包含零个或多个元素,标识这个appender将会添加到这个loger(理解root为一个全局的loger)。
举例子:
上图这是我定义好的文件输出的appender节点,对应下图的appender-ref节点,ref对应appender的name属性,上面说到root节点好比一个方法,所以现在这个方法的意思是全局打印等级为INFO,而且四个appender变量都执行,即正常的控制台输出和warn、info、error的三个文件输出,可以到对应的控制台和日志文件里面看到的确有日志。反之倘若我们level定为Debug,或者去除name为“WARN”的appender则是输出Debug以上等级的日志,WARN.log日志文件也不会再有日志打印进去。
2、子节点--loger
loger用来设置某一个包或者具体的某一个类的日志打印级别、以及指定appender,也就是只管辖指定的区域的日志输出规则。loger仅有一个name属性,一个可选的level和一个可选的addtivity属性。
注意:这里说的上级就是root节点
name:用来指定受此loger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
addtivity:是否向上级loger传递打印信息。默认是true。
举例子:
控制com.dudu.controller.LearnController类的日志打印,打印级别为“WARN”;
additivity属性为false,表示此loger的打印信息不再向上级传递;
指定了名字为“console”的appender;
这时候执行com.dudu.controller.LearnController类的login方法时,先执行loggername="com.dudu.controller.LearnController"level="WARN"additivity="false",
将级别为“WARN”及大于“WARN”的日志信息交给此loger指定的名为“console”的appender处理,在控制台中打出日志,不再向上级root传递打印信息。
注意:
当然如果你把additivity=”false”改成additivity=”true”的话,就会打印两次,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次。
四、配合多环境
据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在logback-spring.xml中使用springProfile节点来定义,方法如下:
文件名称不是logback.xml,想使用spring扩展profile支持,要以logback-spring.xml命名
可以启动服务的时候指定profile(如不指定使用默认),如指定prod的方式为:
java-jarxxx.jar–spring.profiles.active=prod
关于多环境配置可以参考
SpringBoot干货系列:(二)配置文件解析