SpringBoot配置与打包基础

[复制链接]
发表于 2023-2-17 11:21:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本篇主要记录SpringBoot使用的基础配置
SpringBoot Maven配置

SpringBoot maven依赖关系

我们创建springboot项目后,会发现项目的pom文件都会继承自spring-boot-starter-parent这个配置,打开这个父配置文件,会发下它又继承自spring-boot-dependencies这个配置文件。
spring-boot-dependencies中使用已经引入了大量又springboot官方测试稳定的依赖包,因此我们在自己的springboot项目中使用这里面定义的依赖包时,可以不写版本信息。
graph LRspringboot项目 --> spring-boot-starter-parent --> spring-boot-dependenciesstarter的含义

springboot项目引入的starter类型的依赖,如spring-boot-starter-web,就是一个包含了所有web开发需要使用的依赖包的配置文件。根据maven的依赖传递规则,我们不需要再手动引入各种依赖包。这样就实现了快速的配置。
针对springboot官方提供的各种starter,命名方式一般是spring-boot-starter-xxx,而对于第三方提供的starter,命名方式一般是xxx-spring-boot-starter。
SpringBoot配置

配置写在哪

resource\application.properties是SpringBoot默认使用的配置文件,当然SpringBoot还支持yml,yaml这两种格式定义的配置文件。
当同时存在这三种配置文件时,配置的优先级是
properties > yml > yaml
配置怎么用

使用@Value
  1. @Component
  2. public class Foo {
  3.         @Value("${server.port}")
  4.         private int port;
  5.         @Value("${server.host}")
  6.         private String host;
  7. }
复制代码
在使用Spring管理的Bean中,可以使用@Value注解修饰属性,则可以向该属性中注入数据,如果在@Value中使用SpEL表达式,则可以从配置文件中注入对应的配置。
使用Environment
  1. @Component
  2. public class Foo {
  3.         @Autorwired
  4.         private Environment env;
  5.        
  6.         public static void main(String[] args) {
  7.                 System.out.pringln(env.getProperty("server.port"));
  8.         }
  9. }
复制代码
让Spring自动注入Environment对象,则可以从中获取全部配置。
将一组配置封装到一个对象中
  1. @Component
  2. @ConfigurationProperties("datasource")
  3. @Data
  4. public class MyDatasource {
  5.         private String driver;
  6.         private String url;
  7.         private String username;
  8.         private String password;
  9. }
复制代码
定义这样一个Bean,交给Spring管理,通过使用@ConfigurationProperties("datasource")注解,告诉了Spring将配置文件中datasource指定的这一组配置注入到对应的属性中。
  1. datasource:
  2.         driver: com.xxx.yyy
  3.         url: jdbc:mysql://xxx:3306/test
  4.         username: foo
  5.         password: bar
复制代码
后续就可以在需要使用的地方将MyDatasource注入进来,就可以通过访问属性获取到配置值。
SpringBoot引导程序

注解了@SpringBootApplication的类是SpringBoot程序启动的引导类,其中的main方法会运行Spring容器,加载引导类所在包以及子包的所有Bean。
  1. package com.leo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class HelloSpringBootApplication {
  6.         public static void main(String[] args) {
  7.                 SpringApplication.run(HelloSpringBootApplication.class, args);
  8.         }
  9. }
复制代码
SpringBoot程序打包与运行

打包插件

可以使用mvn package来运行这个项目的打包程序,这个过程会从上到下依次执行package之前的所有生命周期。

如果希望打包好的jar包可以直接使用java -jar运行,需要在pom中配置如下的插件。否则打包好的jar包中META-INF/MANIFEST.MF文件中会缺少Main-Class:的配置,导致无法使用-jar运行。
使用了如下插件后,除了打包项目的代码,还会将程序依赖的所有jar包打进项目包中,同时还会有SpringBoot自己的类加载器等。
  1. <build>
  2.         <plugins>
  3.             <plugin>
  4.                 <groupId>org.springframework.boot</groupId>
  5.                 <artifactId>spring-boot-maven-plugin</artifactId>
  6.             </plugin>
  7.         </plugins>
  8.     </build>
复制代码
临时配置

如果我们要对一个已经打好包的程序去修改运行时的配置,我们不需要修改程序的配置文件然后重新打包,只需要在启动程序时增加命令行参数,例如
  1. java -jar fake-server.jar --server.port=8888
复制代码
可以将fake-server.jar启动时的端口临时设置为8888。配置覆盖的优先级可以查看官方文档。
配置文件分级


  • 1级,jar包同层file:config/application.yml 【最高】
  • 2级,jar包同层file: application.yml
  • 3级,classpath: config/application.yml
  • 4级,classpath: application.yml 【最低】
多层级配置文件间的属性采用叠加并覆盖的形式作用于程序。
自定义配置文件

如果不想使用默认的application.yml作为配置文件,可以自定义其他名字,例如myconfig.yml。启动时,需要添加命令行参数指定该文件为配置文件。
  1. java -jar fake-server.jar --spring.config.name=myconfig
  2. java -jar fake-server.jar --spring.config.location=/home/xxx/myconfig.yml
  3. java -jar fake-server.jar --spring.config.location=classpath:myconfig.yml
复制代码
多环境配置

配置文件可以根据开发、测试、生产等不同的环境,定义多份,启动时可以选择某个环境进行启动。可以在主配置文件中指定当前生效的配置文件的后缀,主配置文件中一般设置公共配置,环境配置文件中设置独立的或与公共配置有差异的配置。

  • 主配置文件application.yml
  1. spring:
  2.   profiles:
  3.     active: dev
复制代码

  • 生产环境配置application-pro.yml
  1. server:
  2.   port: 80
复制代码

  • 开发环境配置application-dev.yml
  1. server:
  2.   port: 81
复制代码

  • 测试环境配置application-test.yml
  1. server:
  2.   port: 82
复制代码
我们开可以将配置文件拆分的更细,例如application-devDB.yml只配置数据库相关的配置,application-devMVC.yml只配置MVC相关的配置。那么可以使用下面的方法将配置加载进来。这种配置方式,配置文件的加载顺序是devDB, devMVC, dev,所以dev中的属性会覆盖其他两个配置中的属性。
  1. # 主配置文件application.ymlspring:
  2.   profiles:
  3.     active: dev    include:devDB, devMVC
复制代码
还可以使用如下方式对拆分的配置进行分组。这样指定激活dev环境时,会同时加载dev分组的其他配置。注意,这里加载配置的顺序是dev, devDB, devMVC。
  1. # 主配置文件application.ymlspring:
  2.   profiles:
  3.     active: dev    group:      "dev": devDB, devMVC          "pro": proDB, proMVC
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表