SpringBoot配置与打包基础

SpringBoot,基础,打包 · 浏览次数 : 254

小编点评

**SpringBoot Maven 配置 SpringBoot 项目的配置** Spring Boot 项目的配置主要包含以下几个部分: * **`application.yml`**:这是 Spring Boot 项目的默认配置文件,它包含了所有与应用程序配置相关的属性和配置。 * **`application.yml.dev`**:这是开发环境的配置文件,它包含了与开发环境相关的属性。 * **`application.yml.prod`**:这是生产环境的配置文件,它包含了与生产环境相关的属性。 * **`bootstrap.properties`**:这是一个全局配置文件,它包含了所有与 Spring Boot 项目启动相关的配置。 **Spring Boot 项目的配置解析顺序** 当 Spring Boot 项目启动时,会按照以下顺序解析配置文件: 1. **`application.yml`** 2. **`application.yml.dev`** 3. **`application.yml.prod`** 4. **`bootstrap.properties`** 当多个配置文件中找到相同名称的属性时,最后一个配置文件的属性覆盖前一个配置文件的属性。 **配置文件的分层** 配置文件的分层是按照优先级从最高到最低的顺序排列的。 * **`application.yml`**:最高优先级 * **`application.yml.dev`**:次要优先级 * **`application.yml.prod`**:最次要优先级 **自定义配置文件** 您可以通过修改 `application.yml` 的命名或路径来自定义配置文件。例如,您可以将 `application.yml` 放在项目的 `resources` 目录中,或者将其命名为 `myconfig.yml`。 **启动时指定配置文件** 您可以使用 `-spring.config.name` 和 `-spring.config.location` 命令行参数指定配置文件的名字或路径。例如,以下命令将启动 `fake-server.jar` 应用程序,并指定 `myconfig.yml` 文件作为配置文件: ``` java -jar fake-server.jar --spring.config.name=myconfigjava --jar fake-server.jar --spring.config.location=/home/xxx/myconfig.ymljava ```

正文

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

SpringBoot Maven配置

SpringBoot maven依赖关系

我们创建springboot项目后,会发现项目的pom文件都会继承自spring-boot-starter-parent这个配置,打开这个父配置文件,会发现它又继承自spring-boot-dependencies这个配置文件。

spring-boot-dependencies中使用<dependencyManagement>已经引入了大量由springboot官方测试稳定的依赖包,因此我们在自己的springboot项目中使用这里面定义的依赖包时,可以不写版本信息。

graph LR springboot项目 --> spring-boot-starter-parent --> spring-boot-dependencies

starter的含义

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

@Component
public class Foo {
	@Value("${server.port}")
	private int port;
	@Value("${server.host}")
	private String host;
}

在使用Spring管理的Bean中,可以使用@Value注解修饰属性,则可以向该属性中注入数据,如果在@Value中使用SpEL表达式,则可以从配置文件中注入对应的配置。

使用Environment

@Component
public class Foo {
	@Autorwired
	private Environment env;
	
	public static void main(String[] args) {
		System.out.pringln(env.getProperty("server.port"));
	}
}

让Spring自动注入Environment对象,则可以从中获取全部配置。

将一组配置封装到一个对象中

@Component
@ConfigurationProperties("datasource")
@Data
public class MyDatasource {
	private String driver;
	private String url;
	private String username;
	private String password;
}

定义这样一个Bean,交给Spring管理,通过使用@ConfigurationProperties("datasource")注解,告诉了Spring将配置文件中datasource指定的这一组配置注入到对应的属性中。

datasource:
	driver: com.xxx.yyy
	url: jdbc:mysql://xxx:3306/test
	username: foo
	password: bar

后续就可以在需要使用的地方将MyDatasource注入进来,就可以通过访问属性获取到配置值。

SpringBoot引导程序

注解了@SpringBootApplication的类是SpringBoot程序启动的引导类,其中的main方法会运行Spring容器,加载引导类所在包以及子包的所有Bean。

package com.leo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringBootApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloSpringBootApplication.class, args);
	}

}

SpringBoot程序打包与运行

打包插件

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

image

如果希望打包好的jar包可以直接使用java -jar运行,需要在pom中配置如下的插件。否则打包好的jar包中META-INF/MANIFEST.MF文件中会缺少Main-Class:的配置,导致无法使用-jar运行。

使用了如下插件后,除了打包项目的代码,还会将程序依赖的所有jar包打进项目包中,同时还会有SpringBoot自己的类加载器等。

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

临时配置

如果我们要对一个已经打好包的程序去修改运行时的配置,我们不需要修改程序的配置文件然后重新打包,只需要在启动程序时增加命令行参数,例如

java -jar fake-server.jar --server.port=8888

可以将fake-server.jar启动时的端口临时设置为8888。配置覆盖的优先级可以查看官方文档

配置文件分级

  1. 1级,jar包同层file:config/application.yml 【最高】
  2. 2级,jar包同层file: application.yml
  3. 3级,classpath: config/application.yml
  4. 4级,classpath: application.yml 【最低】

多层级配置文件间的属性采用叠加并覆盖的形式作用于程序。

自定义配置文件

如果不想使用默认的application.yml作为配置文件,可以自定义其他名字,例如myconfig.yml。启动时,需要添加命令行参数指定该文件为配置文件。

java -jar fake-server.jar --spring.config.name=myconfig
java -jar fake-server.jar --spring.config.location=/home/xxx/myconfig.yml
java -jar fake-server.jar --spring.config.location=classpath:myconfig.yml

多环境配置

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

  • 主配置文件application.yml
spring:
  profiles:
    active: dev
  • 生产环境配置application-pro.yml
server:
  port: 80
  • 开发环境配置application-dev.yml
server:
  port: 81
  • 测试环境配置application-test.yml
server:
  port: 82

我们开可以将配置文件拆分的更细,例如application-devDB.yml只配置数据库相关的配置,application-devMVC.yml只配置MVC相关的配置。那么可以使用下面的方法将配置加载进来。这种配置方式,配置文件的加载顺序是devDB, devMVC, dev,所以dev中的属性会覆盖其他两个配置中的属性。

# 主配置文件application.yml
spring:
  profiles:
    active: dev
    include:devDB, devMVC

还可以使用如下方式对拆分的配置进行分组。这样指定激活dev环境时,会同时加载dev分组的其他配置。注意,这里加载配置的顺序是dev, devDB, devMVC。

# 主配置文件application.yml
spring:
  profiles:
    active: dev
    group:
      "dev": devDB, devMVC
      "pro": proDB, proMVC

与SpringBoot配置与打包基础相似的内容:

SpringBoot配置与打包基础

本篇主要记录SpringBoot使用的基础配置 SpringBoot Maven配置 SpringBoot maven依赖关系 我们创建springboot项目后,会发现项目的pom文件都会继承自spring-boot-starter-parent这个配置,打开这个父配置文件,会发现它又继承自spr

[转帖]调试springboot数据库系统应用时常用debug日志配置, 解决问题缩小范围时常用

https://www.yihaomen.com/article/1853.html 摘要: 用 spring boot 开发应用时,在遇到麻烦问题时,经常会打开debug日志,下面记录一个通用的思路,基于spring boot以及jpa来实现, 一般来说,将root的日志级别设置为log.leve

[转帖]Springboot配置https访问

https://www.cnblogs.com/feifuzeng/p/14709372.html 介绍 该篇博文主要介绍如何配置Springboot使其打包部署的服务必须通过HTTPS协议才可访问,仅供内部研究使用。 生成https证书 要使用https,首先需要ssl证书,获取SSL证书有两种方

springboot~封装依赖引用包jar还是pom,哪种更规范

将多个第三方包封装成一个项目后,如果你的目的是让其他开发人员可以直接引用这些依赖,一般来说有两种常见的方式: 打成JAR包:将封装好的项目编译打包成JAR文件,其他开发人员可以将这个JAR文件添加到他们的项目中,并在项目的构建工具(比如Maven)中配置该JAR作为依赖。这样做的好处是简单直接,其他

SpringBoot项目从0到1配置logback日志打印

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 一、写文背景 我们在写后端项目的时候,日志打印是必需的。支持SpringBoot项目的日志框架一般有log4j、logback,这二者各

SpringBoot项目实现日志打印SQL明细(包括SQL语句和参数)几种方式

前言 我们在开发项目的时候,都会连接数据库。有时候遇到问题需要根据我们编写的SQL进行分析,但如果不进行一些开发或者配置的话,这些SQL是不会打印到控制台的,它们默认是隐藏的。下面给大家介绍几种常用的方法。 第一种、代码形式 Mybatis框架是Java程序员最常用的数据库映射框架,MyBatis

SpringCloud搭建保姆级教程

一、搭建服务注册与发现中⼼ 使⽤Spring Cloud Netflix 中的 Eureka 搭建服务注册与发现中⼼ 1、创建SpringBoot应用添加依赖 1、spring web 2、eureka server 2、配置服务注册与发现中⼼ ## 设置服务注册与发现中⼼的端⼝ server: p

[转帖]SpringBoot配置SSL 坑点总结【密码验证失败、连接不安全】

文章目录 前言1.证书绑定问题2.证书和密码不匹配3.yaml配置文件问题3.1 解密类型和证书类型是相关的3.2 配置文件参数混淆 后记 前言 在SpringBoot服务中配置ssl,无非就是下载证书设置一下配置文件的问题,这里主要记录我在配置的过程中遇到的坑点。 如果是新手上道的话建议结合其他的

[转帖]Springboot配置kafka用户名密码

华为云开发者联盟 Springboot配置kafka用户名密码 Springboot配置kafka用户名密码 SpringBoot配置kafka用户名密码 Springboot配置kafka用户名密码 今天在写配置kafka用户名密码的yml文件时遇到IDE无法直接.出sasl的问题,过程中也尝试过

Mapper that could not be found

现象1 mapper 资源扫不到 resources 建的是 目录 ,不是 package 所以如果直接 a.b 的方式创建,会扫描不到 mapper.xml 文件 现象2 缺少配置文件 HisDruidConfig SpringBoot 配置多数据源 现象3 没有启动添加扫描 启动项缺少扫描 Ma