• springboot打包笔记



    项目有各种环境,例如:local,uat,prd等。
    各种打包方式一定要熟练掌握。

    做此笔记是因为做了那么多项目,也打了很多包,居然还没弄的很明白。

    还是那句话,蓦然回首,发现自己除了sb什么也不是。。。
    所以不能再混沌下去了,必须弄明白。

    多配置文件

    如:
    application-local.yml
    application-test.yml
    application-prd.yml
    application.yml # 只配置profiles

    application.yml

    打哪个环境的包,这里替换下就行:

    spring:
      profiles:
        active: test
    

    一种方式就是纯纯的不指定打包方式,到了各个环境启动脚本里面加。

    本地启动参数

    固定:
    vm里面加 -Dspring.profiles.active=local

    是替换profiles,还是复制文件

    一直没弄清楚什么时候只需要替换profiles即可。
    什么时候需要复制文件。一般是两种都试试。

    感觉和服务器的启动脚本有关,如果是自定义的脚本,就可以profiles。
    如果是固定某个模块,就需要复制。

    后来摸索了下,如果是java -jar命令方式启动,只修改application.yml的profiles即可。
    如果是发版平台启动,需要复制下,因为发版平台默认都用ddd,所以只能复制到固定的文件目录。

    maven profiles动态打包

    这种方式比较优雅。
    不用改任何配置,打包时,勾选idea maven界面的模块即可。

    需要配置两部分:
    1、pom.xml添加maven打包插件。

    <plugins>
    	<plugin>
    	    <artifactId>maven-deploy-pluginartifactId>
    	    <configuration>
    	      <skip>trueskip>
    	    configuration>
        plugin>
    plugins>
    

    2、pom.xml里面需要添加profiles。

    <profiles>
        <profile>
          <id>devid>
          <properties>
            <profiles.active>src/main/resources/devprofiles.active>
          properties>
          <activation>
            <activeByDefault>trueactiveByDefault>
          activation>
        profile>
        <profile>
          <id>testid>
          <properties>
            <profiles.active>src/main/resources/testprofiles.active>
          properties>
        profile>
        <profile>
          <id>prodid>
          <properties>
            <profiles.active>src/main/resources/prodprofiles.active>
          properties>
        profile>
      profiles>
    
    

    3、定义资源目录等(这一步必不可少)。
    都是网上通用的配置。

    <build>
        
        <resources>
          <resource>
            <directory>src/main/resourcesdirectory>
            <includes>
              <include>**/*.propertiesinclude>
              <include>**/*.xmlinclude>
              <include>**/*.ymlinclude>
            includes>
          resource>
          <resource>
            <directory>${profiles.active}directory>
          resource>
          <resource>
            <directory>src/main/javadirectory>
            <includes>
              <include>**/*.propertiesinclude>
              <include>**/*.xmlinclude>
              <include>**/*.ymlinclude>
            includes>
            <filtering>falsefiltering>
          resource>
        resources>
        <plugins>
          <plugin>
            <artifactId>maven-deploy-pluginartifactId>
            <configuration>
              <skip>trueskip>
            configuration>
          plugin>
          <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
            <configuration>
              <finalName>${project.parent.name}finalName>
              <outputDirectory>../targetoutputDirectory>
              <fork>truefork>
              <excludes>
                <exclude>
                  <groupId>org.projectlombokgroupId>
                  <artifactId>lombokartifactId>
                exclude>
                <exclude>
                  <groupId>org.springframework.bootgroupId>
                  <artifactId>spring-boot-configuration-processorartifactId>
                exclude>
              excludes>
            configuration>
          plugin>
        plugins>
      build>
    

    这样就完成了。
    本地启动的时候,直接勾选idea maven界面的profiles即可,勾选哪个就启动哪个。

    打包的时候一样,勾选哪个就是哪个。
    期待效果:
    打包后会在classes目录下生成一个同于profile目录下配置的文件,如:application-custom.yml,并且内容和勾选的profile内容一致。 如果是这样,表示打包成功了。

    apollo配置

    这个不分环境了。profiles和复制都不用。

    springboot配置文件的加载先后顺序

    1、内部配置加载顺序

    springboot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

    –file:./config/ --> 当前项目根目录下的 config 目录下
    –file:./ --> 当前项目的根目录下
    –classpath:/config/ --> resources/config目录下
    –classpath:/ --> resources目录下
    SpringBoot官网:

    优先级由高到底,高优先级的配置会覆盖低优先级的配置。

    如果低优先级存在高优先级没有的属性,则会互补配置。
    如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的
    这四个位置是默认位置,即 Spring Boot 启动,默认会从这四个位置按顺序去查找相关属性并加载。

    我们也可以通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件。

    项目默认加载的配置文件名是 application ,我们可以通过属性 spring.config.name 来指定配置文件的文件名。

    使用 spring.config.location 属性重新定义配置文件的位置,它会覆盖掉默认的四个位置。使用 spring.config.additional-location 这个属性自定义配置文件位置,表示在默认的四个位置的基础上,再添加几个位置,新添加的位置的优先级大于原本的位置。 在自定义配置文件位置时,值一定要以 / 结尾。例如 spring.config.location=classpath:/myconfig/

    2、外部配置加载顺序

    SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

    (1)命令行参数 (加载时优先加载) 所有的配置都可以在命令行上进行指定( --配置)。 可以通过指定 --spring.config.location来改变默认的配置文件位置:

    多个配置用空格分开;格式为: --配置项=值

    (2)来自java:comp/env的JNDI属性

    (3)Java系统属性(在命令行中使用-D指定),可通过System.getProperties()获得相关内容

    (4)操作系统环境变量

    大多数操作系统不允许使用句点分隔的键名,使用下划线代替(例如,SPRING_CONFIG_NAME代替spring.config.name)

    (5)RandomValuePropertySource配置的random.*属性值

    (6)jar包外部的application-{profile}.properties或application-{profile}.yml(带spring.profile)配置文件。

    (7)jar包内部的application-{profile}.properties或application-{profile}.yml(带spring.profile)配置文件。

    (8)jar包外部的application.properties或application.yml(不带spring.profile)配置文件。

    (9)jar包内部的application.properties或application.yml(不带spring.profile)配置文件。

    (10)@Configuration注解类上的@PropertySource

    (11)通过SpringApplication.setDefaultProperties指定的默认属性

    其中常用的为:(1)(6)(7)(8)(9)(10)

    总结

    优先加载操作系统层面的配置、命令行
    由jar包外向jar包内进行寻找,优先查找config目录。
    优先加载带profile(application-{profile}.yml)的,后加载不带profile(application.yml)的
    高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

    3、远程配置中心

    Nacos为例:默认远程配置优先级最高

    可以通过在远程配置中心中做如下配置,设置本地配置覆盖远程配置:

    spring:
      cloud:
        config:
    #是否允许本地配置覆盖远程配置
          allow-override: true
    #是否一切以本地配置为准,默认false
          override-none: false
          #系统环境变量或系统属性才能覆盖远程配置文件的配置
          #本地配置文件中配置优先级低于远程配置,默认true
          override-system-properties: true
    
  • 相关阅读:
    (memcpy,memmove...)内存函数还不会??别怕,我来助你一臂之力
    Win10使用nginx,注册到服务设置自启与后台运行,解决 Access is denied 问题
    Watch监听器的使用
    你应该这样去开发接口:Java多线程并行计算
    计算机网络常见面试题
    java车牌识别系统mysql
    绿色荧光素标记Galectin-3抑制剂,FITC-Galectin-3
    ps如何换背景颜色,自学ps软件photoshop2022,3种不同的方式笔记记录
    离线数据仓库建设
    【FreeRTOS】基于STM32F407的Freertos实时操作系统移植
  • 原文地址:https://blog.csdn.net/enthan809882/article/details/139376819