• Spring Boot(二)


    1、运行维护

    1.1、打包程序

            SpringBoot程序是基于Maven创建的,在Maven中提供有打包的指令,叫做package。本操作可以在Idea环境下执行。

    mvn package

    打包后会产生一个与工程名类似的jar文件,其名称是由模块名+版本号+.jar组成的。

    1.2、程序运行

    程序包打好以后,就可以直接执行了。在程序包所在路径下,执行指令。

    java -jar 工程包名.jar

    执行程序打包指令后,程序正常运行,与在Idea下执行程序没有区别。

            特别关注:如果你的计算机中没有安装java的jdk环境,是无法正确执行上述操作的,因为程序执行使用的是java指令。

            特别关注:在使用向导创建SpringBoot工程时,pom.xml文件中会有如下配置,这一段配置千万不能删除,否则打包后无法正常执行程序。

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.springframework.bootgroupId>
    5. <artifactId>spring-boot-maven-pluginartifactId>
    6. plugin>
    7. plugins>
    8. build>

    但是实际上会有一些其他问题,加载主引导类呀,打包时候的jdk版本呀

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.pluginsgroupId>
    5. <artifactId>maven-compiler-pluginartifactId>
    6. <version>3.8.1version>
    7. <configuration>
    8. <source>17source>
    9. <target>17target>
    10. <encoding>UTF-8encoding>
    11. configuration>
    12. plugin>
    13. <plugin>
    14. <groupId>org.springframework.bootgroupId>
    15. <artifactId>spring-boot-maven-pluginartifactId>
    16. <version>${spring-boot.version}version>
    17. <configuration>
    18. <mainClass>com.songzhishu.springboot.SpringBootDemo3ApplicationmainClass>
    19. <skip>falseskip>
    20. configuration>
    21. <executions>
    22. <execution>
    23. <id>repackageid>
    24. <goals>
    25. <goal>repackagegoal>
    26. goals>
    27. execution>
    28. executions>
    29. plugin>
    30. plugins>
    31. build>

    如果在启动的时候出现端口被占用,那么怎么处理问题呐!

    1. # 查询端口
    2. netstat -ano
    3. # 查询指定端口
    4. netstat -ano |findstr "端口号"
    5. # 根据进程PID查询进程名称
    6. tasklist |findstr "进程PID号"
    7. # 根据PID杀死任务
    8. taskkill /F /PID "进程PID号"
    9. # 根据进程名称杀死任务
    10. taskkill -f -t -im "进程名称"

    2、配置高级

    2.1、临时属性设置

            程序打包好后,然后出现一些小问题,然后要修改配置文件,那么要重新打包程序嘛,然后修改配置文件嘛,可以在程序启动的时候可以设置临时的属性。方法也特别简单,在启动的时候添加上对应参数就可以了。

    java –jar springboot.jar –-server.port=80

            比如修改启动的端口号!当然也可以添加其他的属性,上面的命令是启动SpringBoot程序包的命令,在命令输入完毕后,空一格,然后输入两个-号。下面按照属性名=属性值的形式添加对应参数就可以了。记得,这里的格式不是yaml中的书写格式,当属性存在多级名称时,中间使用点分隔,和properties文件中的属性格式完全相同。

    如果你发现要修改的属性不止一个,可以按照上述格式继续写,属性与属性之间使用空格分隔。

    java –jar springboot.jar –-server.port=80 --logging.level.root=debug

    2.2、属性加载优先级

            关于属性的配置和修改不只是可以通过配置类,配置文件,临时修改等等,官方提供的居然有14种配置的位置,也就是说某一处的配置没有生效的话,很有可能是被其他的地方的覆盖啦

    ,然后你就要对照,这些可能会出现的地方进行修改!

    2.3、开发环境中使用临时属性

            是这样的,springboot是提供可以临时修改属性,但是万一再实际的开发中,遇到问题需要临时修改属性,但是修改后没有效果怎么办,所以再开发阶段就要考虑这个问题,我们要测试临时环境的配置是不是可以生效。

     

    再引导类中args可以设置临时属性进行测试,当然如果不想让修改临时属性,去掉args就可以啦。

    2.4、配置文件分类

            SpringBoot提供了配置文件和临时属性的方式来对程序进行配置。前面一直说的是临时属性,这一节要说说配置文件了。其实这个配置文件我们一直在使用,只不过我们用的是SpringBoot提供的4级配置文件中的其中一个级别。4个级别分别是:

    • 类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件)

    • 类路径下config目录下配置文件

    • 程序包所在目录中配置文件

    • 程序包所在目录中config目录下配置文件

            好复杂,一个一个说。其实上述4种文件是提供给你了4种配置文件书写的位置,功能都是一样的,都是做配置的。那大家关心的就是差别了,没错,就是因为位置不同,产生了差异。总体上来说,4种配置文件如果都存在的话,有一个优先级的问题,说白了就是加入4个文件我都有,里面都有一样的配置,谁生效的问题。上面4个文件的加载优先顺序为

    1. file :config/application.yml 【最高】

    2. file :application.yml

    3. classpath:config/application.yml

    4. classpath:application.yml 【最低】

    3、多环境开发

    什么是多环境开发,就是再不同的环境下面对应不同的配置文件。

    3.1、单一的配置文件

    1. spring:
    2. config:
    3.   activate: pro #启用pro
    4. ---
    5. spring:
    6. config:
    7.   activate:
    8.       on-profile: pro
    9. server:
    10. port: 80
    11. ---
    12. spring:
    13. config:
    14.   activate:
    15.       on-profile: dev
    16. server:
    17. port: 81
    18. ---
    19. spring:
    20. config:
    21.   activate:
    22.       on-profile: test
    23. server:
    24. port: 82

    总结

    1. 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境

    2. yaml格式中设置多环境使用---区分环境设置边界

    3. 每种环境的区别在于加载的配置属性不同

    4. 启用某种环境时需要指定启动时使用该环境

     

    3.2、多文件的配置文件

            将所有的配置都放在一个配置文件中,尤其是每一个配置应用场景都不一样,这显然不合理,于是就有了将一个配置文件拆分成多个配置文件的想法。拆分后,每个配置文件中写自己的配置,主配置文件中写清楚用哪一个配置文件就好了。

    主配置文件

    1. spring:
    2. profiles:
    3. active: pro # 启动pro

    环境配置文件

    1. server:
    2. port: 80

            环境配置文件因为每一个都是配置自己的项,所以连名字都不用写里面了。那问题是如何区分这是哪一组配置呢?使用文件名区分。

    application-pro.yaml

    1. server:
    2. port: 80

    application-dev.yaml

    1. server:
    2. port: 81

    文件的命名规则为:application-环境名.yml。

            在配置文件中,如果某些配置项所有环境都一样,可以将这些项写入到主配置中,只有哪些有区别的项才写入到环境配置文件中。

    • 主配置文件中设置公共配置(全局)

    • 环境分类配置文件中常用于设置冲突属性(局部)

    总结

    1. 可以使用独立配置文件定义环境属性

    2. 独立配置文件便于线上系统维护更新并保障系统安全性

    3.3、多环境开发独立配置文件书写技巧

    准备工作

    将所有的配置根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下

    • application-devDB.yml

    • application-devRedis.yml

    • application-devMVC.yml

    使用

            使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

    1. spring:
    2. profiles:
    3.   active: dev
    4.       include: devDB,devRedis,devMVC

            比较一下,现在相当于加载dev配置时,再加载对应的3组配置,从结构上就很清晰,用了什么,对应的名称是什么

    注意

            当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

    改良

            但是上面的设置也有一个问题,比如我要切换dev环境为pro时,include也要修改。因为include属性只能使用一次,这就比较麻烦了。SpringBoot从2.4版开始使用group属性替代include属性,降低了配置书写量。简单说就是我先写好,你爱用哪个用哪个。

    1. spring:
    2. profiles:
    3.   active: dev
    4.       group:
    5.       "dev": devDB,devRedis,devMVC
    6.     "pro": proDB,proRedis,proMVC
    7.     "test": testDB,testRedis,testMVC

            现在再来看,如果切换dev到pro,只需要改一下是不是就结束了?完美!

    总结

    1. 多环境开发使用group属性设置配置文件分组,便于线上维护管理

    3.4、多环境开发控制

            多环境开发到这里基本上说完了,最后说一个冲突问题。就是maven和SpringBoot同时设置多环境的话怎么搞。

            要想处理这个冲突问题,你要先理清一个关系,究竟谁在多环境开发中其主导地位。也就是说如果现在都设置了多环境,谁的应该是保留下来的,另一个应该遵从相同的设置。

            maven是做什么的?项目构建管理的,最终生成代码包的,SpringBoot是干什么的?简化开发的。简化,又不是其主导作用。最终还是要靠maven来管理整个工程,所以SpringBoot应该听maven的。整个确认后下面就好做了。大体思想如下:

    • 先在maven环境中设置用什么具体的环境

    • 在SpringBoot中读取maven设置的环境即可

    maven中设置多环境

    1. <profiles>
    2. <profile>
    3. <id>env_devid>
    4. <properties>
    5. <profile.active>devprofile.active>
    6. properties>
    7. <activation>
    8. <activeByDefault>trueactiveByDefault>
    9. activation>
    10. profile>
    11. <profile>
    12. <id>env_proid>
    13. <properties>
    14. <profile.active>proprofile.active>
    15. properties>
    16. profile>
    17. profiles>

    SpringBoot中读取maven设置值

    1. spring:
    2. profiles:
    3. active: @profile.active@

    4、日志

    4.1、日志级别

    日志设置好以后可以根据设置选择哪些参与记录。这里是根据日志的级别来设置的。日志的级别分为6种,分别是:

    • TRACE:运行堆栈信息,使用率低

    • DEBUG:程序员调试代码使用

    • INFO:记录运维过程数据

    • WARN:记录运维过程报警数据

    • ERROR:记录错误堆栈信息

    • FATAL:灾难信息,合并计入ERROR

    一般情况下,开发时候使用DEBUG,上线后使用INFO,运维信息记录使用WARN即可。下面就设置一下日志级别。日志级别低的会被日志级别高的覆盖。

    1. logging:
    2. # 设置日志组
    3.   group:
    4.   # 自定义组名,设置当前组中所包含的包
    5.       ebank: com.songzhishu.controller
    6.   level:
    7.   root: warn
    8.       # 为对应组设置日志级别
    9.       ebank: debug
    10.   # 为对包设置日志级别
    11.       com.songzhishu.controller: debug

    基于lombok提供的@Slf4j注解为类快速添加日志对象

    4.2、日志输出格式控制

            日志已经能够记录了,但是目前记录的格式是SpringBoot给我们提供的,如果想自定义控制就需要自己设置了。先分析一下当前日志的记录格式。

    1. 2023-11-10 12:43:06.694 #时间
    2. INFO #日志级别
    3. 2024 #pid
    4. ---
    5. [main] #当前线程
    6. c.s.s.SpringBootDemo3Application: #所属的类或者接口名(简化啦)
    7. Started SpringBootDemo3Application in 1.497 seconds (JVM running for 1.857)#日志信息

    对于单条日志信息来说,日期,触发位置,记录信息是最核心的信息。级别用于做筛选过滤,PID与线程名用于做精准分析。

    1. logging:
    2. pattern:
    3.   console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"

    4.3、日志文件

    日志不能仅显示在控制台上,要把日志记录到文件中,方便后期维护查阅。对于日志文件的使用存在各种各样的策略,例如每日记录,分类记录,报警后记录等。这里主要研究日志文件如何记录。记录日志到文件中格式非常简单,设置日志文件名即可。

    1. logging:
    2. logback:
    3.   rollingpolicy:
    4.       max-file-size: 3KB
    5.           file-name-pattern: server.%d{yyyy-MM-dd}.%i.log

  • 相关阅读:
    【rust】| 06——语言特性 | 所有权
    vuepress 二十分钟快速搭建个人博客
    Spring Boot项目学习之通用权限管理项目03
    异步FIFO设计的仿真与综合技术(6)
    WebRTC与CSS滤镜(CSS filter)
    iris(golang)连接mysql数据库
    动态规划模板总结(1)
    [watevrCTF-2019]Cookie Store
    设计模式学习(十一):组合模式
    Python:Flask使用全局变量g传递数据
  • 原文地址:https://blog.csdn.net/keleID/article/details/134349096