国家建设部标准官方网站,汝阳网站建设哪家好,xampp 搭建wordpress,网页传奇游戏排行榜前十名端游一、配置文件1、临时属性设置目前我们的程序包打好了#xff0c;可以发布了。但是程序包打好以后#xff0c;里面的配置都已经是固定的了#xff0c;比如配置了服务器的端口是8080。如果我要启动项目#xff0c;发现当前我的服务器上已经有应用启动起来并且占用了8080端口可以发布了。但是程序包打好以后里面的配置都已经是固定的了比如配置了服务器的端口是8080。如果我要启动项目发现当前我的服务器上已经有应用启动起来并且占用了8080端口这个时候就尴尬了。难道要重新把打包好的程序修改一下吗比如我要把打包好的程序启动端口改成80。SpringBoot提供了灵活的配置方式如果你发现你的项目中有个别属性需要重新配置可以使用临时属性的方式快速修改某些配置。方法也特别简单在启动的时候添加上对应参数就可以了。java –jar springboot.jar –-server.port80上面的命令是启动SpringBoot程序包的命令在命令输入完毕后空一格然后输入两个-号。下面按照属性名属性值的形式添加对应参数就可以了。记得这里的格式不是yaml中的书写格式当属性存在多级名称时中间使用点分隔和properties文件中的属性格式完全相同。如果你发现要修改的属性不止一个可以按照上述格式继续写属性与属性之间使用空格分隔。java –jar springboot.jar –-server.port80 --logging.level.rootdebug1.1、属性加载优先级现在我们的程序配置受两个地方控制了第一配置文件第二临时属性。并且我们发现临时属性的加载优先级要高于配置文件的。那是否还有其他的配置方式呢其实是有的而且还不少打开官方文档中对应的内容就可以查看配置读取的优先顺序。地址奉上https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config我们可以看到居然有14种配置的位置而我们现在使用的是这里面的2个。第3条Config data说的就是使用配置文件第11条Command line arguments说的就是使用命令行临时参数。而这14种配置的顺序就是SpringBoot加载配置的顺序言外之意命令行临时属性比配置文件的加载优先级高所以这个列表上面的优先级低下面的优先级高。其实这个东西不用背的你就记得一点你最终要什么效果你自己是知道的不管这个顺序是怎么个高低排序开发时一定要配置成你要的顺序为准。这个顺序只是在你想不明白问题的时候帮助你分析罢了。比如你现在加载了一个user.name属性。结果你发现出来的结果和你想的不一样那肯定是别的优先级比你高的属性覆盖你的配置属性了那你就可以看着这个顺序挨个排查。哪个位置有可能覆盖了你的属性。总结使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性临时属性添加方式java –jar 工程名.jar –-属性名值多个临时属性之间使用空格分隔临时属性必须是当前boot工程支持的属性否则设置无效2、配置文件分类SpringBoot提供了配置文件和临时属性的方式来对程序进行配置。前面一直说的是临时属性这一节要说说配置文件了。其实这个配置文件我们一直在使用只不过我们用的是SpringBoot提供的4级配置文件中的其中一个级别。4个级别分别是类路径下配置文件一直使用的是这个也就是resources目录中的application.yml文件类路径下config目录下配置文件程序包所在目录中配置文件程序包所在目录中config目录下配置文件好复杂一个一个说。其实上述4种文件是提供给你了4种配置文件书写的位置功能都是一样的都是做配置的。那大家关心的就是差别了没错就是因为位置不同产生了差异。总体上来说4种配置文件如果都存在的话有一个优先级的问题说白了就是加入4个文件我都有里面都有一样的配置谁生效的问题。上面4个文件的加载优先顺序为file config/application.yml 【最高】file application.ymlclasspathconfig/application.ymlclasspathapplication.yml 【最低】那为什么设计这种多种呢说一个最典型的应用吧。场景A你作为一个开发者你做程序的时候为了方便自己写代码配置的数据库肯定是连接你自己本机的咱们使用4这个级别也就是之前一直用的application.yml。场景B现在项目开发到了一个阶段要联调测试了连接的数据库是测试服务器的数据库肯定要换一组配置吧。你可以选择把你之前的文件中的内容都改了目前还不麻烦。场景C测试完了一切OK。你继续写你的代码你发现你原来写的配置文件被改成测试服务器的内容了你要再改回来。现在明白了不场景B中把你的内容都改掉了你现在要重新改回来以后呢改来改去吗解决方案很简单用上面的3这个级别的配置文件就可以快速解决这个问题再写一个配置就行了。两个配置文件共存因为config目录中的配置加载优先级比你的高所以配置项如果和级别4里面的内容相同就覆盖了这样是不是很简单级别1和2什么时候使用呢程序打包以后就要用这个级别了管你程序里面配置写的是什么我的级别高可以轻松覆盖你就不用考虑这些配置冲突的问题了。总结配置文件分为4种项目类路径配置文件服务于开发人员本机开发与测试项目类路径config目录中配置文件服务于项目经理整体调控工程路径配置文件服务于运维人员配置涉密线上环境工程路径config目录中配置文件服务于运维经理整体调控多层级配置文件间的属性采用叠加并覆盖的形式作用于程序二、多环境开发讲的内容距离线上开发越来越近了下面说一说多环境开发问题。什么是多环境其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样这就是多环境。常见的多环境开发主要兼顾3种环境设置开发环境——自己用的测试环境——自己公司用的生产环境——甲方爸爸用的。因为这是绝对不同的三台电脑所以环境肯定有所不同比如连接的数据库不一样设置的访问端口不一样等等。1、yaml单一文件版那什么是多环境开发就是针对不同的环境设置不同的配置属性即可。比如你自己开发时配置你的端口如下server:port: 80如何想设计两组环境呢中间使用三个减号分隔开server:port: 80
---
server:port: 81如何区分两种环境呢起名字呗spring:profiles: pro
server:port: 80
---
spring:profiles: dev
server:port: 81那用哪一个呢设置默认启动哪个就可以了spring:profiles:active: pro # 启动pro
---
spring:profiles: pro
server:port: 80
---
spring:profiles: dev
server:port: 81其中关于环境名称定义上述格式是过时格式标准格式如下spring:config:activate:on-profile: pro总结多环境开发需要设置若干种常用环境例如开发、生产、测试环境yaml格式中设置多环境使用---区分环境设置边界每种环境的区别在于加载的配置属性不同启用某种环境时需要指定启动时使用该环境2、yaml多文件版将所有的配置都放在一个配置文件中尤其是每一个配置应用场景都不一样这显然不合理于是就有了将一个配置文件拆分成多个配置文件的想法。拆分后每个配置文件中写自己的配置主配置文件中写清楚用哪一个配置文件就好了。主配置文件spring:profiles:active: pro # 启动pro环境配置文件server:port: 80环境配置文件因为每一个都是配置自己的项所以连名字都不用写里面了。那问题是如何区分这是哪一组配置呢使用文件名区分。application-pro.yamlserver:port: 80application-dev.yamlserver:port: 81文件的命名规则为application-环境名.yml。在配置文件中如果某些配置项所有环境都一样可以将这些项写入到主配置中只有哪些有区别的项才写入到环境配置文件中。主配置文件中设置公共配置全局环境分类配置文件中常用于设置冲突属性局部总结可以使用独立配置文件定义环境属性独立配置文件便于线上系统维护更新并保障系统安全性3、多环境开发独立配置文件书写技巧作为程序员在搞配置的时候往往处于一种分久必合合久必分的局面。开始先写一起后来为了方便维护就拆分。对于多环境开发也是如此下面给大家说一下如何基于多环境开发做配置独立管理务必掌握。准备工作将所有的配置根据功能对配置文件中的信息进行拆分并制作成独立的配置文件命名规则如下application-devDB.ymlapplication-devRedis.ymlapplication-devMVC.yml使用使用include属性在激活指定环境的情况下同时对多个环境进行加载使其生效多个环境间使用逗号分隔spring:profiles:active: devinclude: devDB,devRedis,devMVC注意当主环境dev与其他环境有相同属性时主环境属性生效其他环境中有相同属性时最后加载的环境属性生效改良但是上面的设置也有一个问题比如我要切换dev环境为pro时include也要修改。因为include属性只能使用一次这就比较麻烦了。SpringBoot从2.4版开始使用group属性替代include属性降低了配置书写量。简单说就是我先写好你爱用哪个用哪个。spring:profiles:active: devgroup:dev: devDB,devRedis,devMVCpro: proDB,proRedis,proMVCtest: testDB,testRedis,testMVC三、日志运维篇最后一部分我们来聊聊日志日志大家不陌生简单介绍一下。日志其实就是记录程序日常运行的信息主要作用如下编程期调试代码运营期记录信息记录日常运营重要信息峰值流量、平均响应时长……记录应用报错信息错误堆栈记录运维过程数据扩容、宕机、报警……1、代码中使用日志工具记录日志步骤①添加日志记录操作RestController
RequestMapping(/books)
public class BookController extends BaseClass{private static final Logger log LoggerFactory.getLogger(BookController.class);GetMappingpublic String getById(){log.debug(debug...);log.info(info...);log.warn(warn...);log.error(error...);return springboot is running...2;}
}上述代码中log对象就是用来记录日志的对象下面的log.debuglog.info这些操作就是写日志的API了。步骤②设置日志输出级别日志设置好以后可以根据设置选择哪些参与记录。这里是根据日志的级别来设置的。日志的级别分为6种分别是TRACE运行堆栈信息使用率低DEBUG程序员调试代码使用INFO记录运维过程数据WARN记录运维过程报警数据ERROR记录错误堆栈信息FATAL灾难信息合并计入ERROR一般情况下开发时候使用DEBUG上线后使用INFO运维信息记录使用WARN即可。下面就设置一下日志级别# 开启debug模式输出调试信息常用于检查系统运行状况
debug: true这么设置太简单粗暴了日志系统通常都提供了细粒度的控制# 开启debug模式输出调试信息常用于检查系统运行状况
debug: true# 设置日志级别root表示根节点即整体应用日志级别
logging:level:root: debug还可以再设置更细粒度的控制步骤③设置日志组控制指定包对应的日志输出级别也可以直接控制指定包对应的日志输出级别logging:# 设置日志组group:# 自定义组名设置当前组中所包含的包ebank: com.itheima.controllerlevel:root: warn# 为对应组设置日志级别ebank: debug# 为对包设置日志级别com.itheima.controller: debug说白了就是总体设置一下每个包设置一下如果感觉设置的麻烦就先把包分个组对组设置没了就这些。总结日志用于记录开发调试与运维过程消息日志的级别共6种通常使用4种即可分别是DEBUGINFO,WARN,ERROR可以通过日志组或代码包的形式进行日志显示级别的控制2、优化日志对象创建代码写代码的时候每个类都要写创建日志记录对象这个可以优化一下使用前面用过的lombok技术给我们提供的工具类即可。Slf4j //这个注解替代了下面那一行
RestController
RequestMapping(/books)
public class BookController extends BaseClass{private static final Logger log LoggerFactory.getLogger(BookController.class); //这一句可以不写了
}3、日志输出格式控制日志已经能够记录了但是目前记录的格式是SpringBoot给我们提供的如果想自定义控制就需要自己设置了。先分析一下当前日志的记录格式。对于单条日志信息来说日期触发位置记录信息是最核心的信息。级别用于做筛选过滤PID与线程名用于做精准分析。了解这些信息后就可以DIY日志格式了。本课程不做详细的研究有兴趣的小伙伴可以学习相关的知识。下面给出课程中模拟的官方日志模板的书写格式便于大家学习。logging:pattern:console: %d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n4、日志文件日志信息显示记录已经控制住了下面就要说一下日志的转存了。日志不能仅显示在控制台上要把日志记录到文件中方便后期维护查阅。对于日志文件的使用存在各种各样的策略例如每日记录分类记录报警后记录等。这里主要研究日志文件如何记录。记录日志到文件中格式非常简单设置日志文件名即可。logging:file:name: server.log虽然使用上述格式可以将日志记录下来了但是面对线上的复杂情况一个文件记录肯定是不能够满足运维要求的通常会每天记录日志文件同时为了便于维护还要限制每个日志文件的大小。下面给出日志文件的常用配置方式logging:logback:rollingpolicy:max-file-size: 3KBfile-name-pattern: server.%d{yyyy-MM-dd}.%i.log以上格式是基于logback日志技术设置每日日志文件的设置格式要求容量到达3KB以后就转存信息到第二个文件中。文件命名规则中的%d标识日期%i是一个递增变量用于区分日志文件。