本篇主要记录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之前的所有生命周期。

如果希望打包好的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配置与打包基础的更多相关文章

  1. webpack1.x环境配置与打包基础【附带各种 "坑" 与解决方案!持续更新中...】

    首先介绍传统模块化开发的主流方案: 1.基与CMD的sea.js,玉伯提出的解决方案,据说原来京东团队在使用.用时才定义,就近加载. 2.基于AMD的require.js,之前在用.提前声明与定义.国 ...

  2. SpringBoot基础系列-SpringBoot配置

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...

  3. springboot配置redis+jedis,支持基础redis,并实现jedis GEO地图功能

    Springboot配置redis+jedis,已在项目中测试并成功运行,支持基础redis操作,并通过jedis做了redis GEO地图的java实现,GEO支持存储地理位置信息来实现诸如附近的人 ...

  4. SpringBoot 部署 docker 打包镜像

    SpringBoot 部署 docker 打包镜像 环境: 1.代码编写工具:IDEA 2.打包:maven 3.docker 4.linux 7.JDK1.8 8.Xshell 9.Xftp 第一步 ...

  5. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  6. SpringBoot 配置 Servlet、Filter、Listener

    SpringBoot 配置 Servlet.Filter.Listener 在SpringBoot应用中,嵌入式的 Servlet 3.0+ 容器不会直接使用 ServletContainerInit ...

  7. SpringBoot配置(1) 配置文件application&yml

    SpringBoot配置(1) 配置文件application&yml 一.配置文件 1.1 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application ...

  8. 腾讯云域名申请+ssl证书申请+springboot配置https

    阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...

  9. Springcloud 中 SpringBoot 配置全集 (收藏版)

    Springcloud 中 SpringBoot 配置全集 (收藏版) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群 ...

  10. SpringBoot 配置 Tomcat SSL

    SpringBoot 配置 Tomcat SSL SSL(Secure Sockets Layer , 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密 ...

随机推荐

  1. goujian

    第二章的内容先对第一张来说更偏向于技术性,在团队合作中,如何保证自己所负责模块的质量的稳定,这就对自身的技术和一些良好的代码书写习惯有一定的要求.这里除了之前接触的代码的整齐(段落划分),变量值和文件 ...

  2. vite不能用@做为路径的解决方法

    vite创建vue3后,发现原来用@做为路径的不能用了,报错信息是 Internal server error: Failed to resolve import "@ 在网上查了一下资料, ...

  3. 利用MVC三层架构做一个案例(利用MyBatis实现增删改查)

    查询所有 利用昨天学习到的MyBatis知识,再加上servlet页面的跳转, demo1.jsp UserMapper.java(接口) servletDemo.java MyBatisDemo.j ...

  4. 第一章 1.1.1节 Kubeadm安装K8S高可用集群

    1.1 安装前必读 请不要使用带中文的服务器和克隆的虚拟机. 生产环境建议使用二进制的方式安装. 文档中的IP地址要更换成自己的IP地址,要谨记!!! 1.2 基本环境配置 kubeadm安装方式自1 ...

  5. 最简单的for循环语句

    前言 在前面的文章中,壹哥给大家讲解了顺序结构.分支结构,接下来我们就来学习Java里的循环结构.Java里的循环结构,可以通过while.do-while.for.foreach等方式进行实现,今天 ...

  6. flutter util---->常用的一些工具方法

    copy text to clipboard Clipboard.setData(ClipboardData(text: string)); since Flutter1.9, you can use ...

  7. 快收藏!最全GO语言实现设计模式

    https://segmentfault.com/a/1190000042859564

  8. lua快速入门~在js基础上,知道Lua 和 Js 的不同即可

    lua 和 javaScript 差不多的,就是一些语法的细节不同,学过js,再注意一下下面的细节,就能上手了~ 快速入门,可以直接看一下菜鸟教程的lua:https://www.runoob.com ...

  9. 迁移学习《Asymmetric Tri-training for Unsupervised Domain Adaptation》

    论文信息 论文标题:Asymmetric Tri-training for Unsupervised Domain Adaptation论文作者:Kuniaki Saito, Y. Ushiku, T ...

  10. [VMware]虚拟网络编辑器

    虚拟网络编辑器 Vmware > 编辑 > 虚拟网络编辑器 VMnet0 VMnet0:用于虚拟桥接模式网络下的虚拟交换机 vmnet0: 实际上就是一个虚拟的网桥 这个网桥有很若干个端口 ...