springboot配置
配置文件分类
- springboot提供了多种属性配置方式
-
- application.xml(只有老的spring项目使用)
- application.properties
- application.yml(或yaml)
优先级:properties>yml>yaml
配置文件
pom.xml★
在Spring Boot项目中,pom.xml文件是Maven项目对象模型(Project Object Model)的定义文件,它用于管理项目的构建、依赖和插件。
Maven是一个流行的自动化构建工具,它通过pom.xml文件来执行构建过程。本教程全部项目都使用Maven构建。
下面是一个基本的pom.xml文件的结构和各个部分的解释:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- 项目的基本信息 --><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId> <!-- 组织或项目的唯一标识符 --><artifactId>my-spring-boot-app</artifactId> <!-- 项目的基本名称 --><version>1.0-SNAPSHOT</version> <!-- 项目的版本号 --><name>My Spring Boot App</name> <!-- 项目的显示名称 --><description>Spring Boot 3 example project</description> <!-- 项目的描述 --><!-- Spring Boot父项目,提供依赖管理和插件管理 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.0</version></parent><!-- 项目依赖 --><dependencies><!-- Spring Boot的Web Starter,包含Spring MVC和Tomcat等 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 其他依赖... --></dependencies><!-- 项目构建配置 --><build><plugins><!-- Spring Boot的Maven插件,用于打包可执行的jar或war文件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 其他插件... --></plugins></build></project>
注意事项:
- 继承Spring Boot父项目:通过指定spring-boot-starter-parent作为父POM,您的项目将继承Spring Boot的默认配置,包括依赖管理、插件管理等。
- 依赖管理:在<dependencies>部分,您可以添加项目所需的所有依赖。Spring Boot提供了许多“Starter”依赖,它们是一组方便的依赖描述符,可以简化构建配置。
- 插件配置:在<build>部分的<plugins>中,您可以配置项目构建时使用的插件。例如,spring-boot-maven-plugin用于创建可执行的jar或war文件。
- 属性和配置:您可以在pom.xml中定义和使用属性,以便于维护和管理配置。例如,您可以定义一个属性来表示Spring Boot的版本号,并在多个地方引用它。
- 多环境配置:Maven支持多环境配置,您可以通过 profiles 来定义不同环境下的配置,并在构建时激活相应的 profile。
properties配置文件*
介绍
properties配置文件是一种用于配置应用程序属性的文件格式。它是一个标准的Java属性文件,通常包含键值对,其中键和值之间用等号=分隔。properties文件可以直接放在src/main/resources目录下,或者放在任何类路径(classpath)可以访问的地方。
只有你需要与旧的Java应用程序或框架保持兼容时才使用。
示例
server.port=8080
server.servlet.context-path=/myapp
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword
优缺点
优点:
向后兼容性:properties文件格式在Java历史中非常悠久,几乎所有版本的Java都支持这种格式。简单性:properties文件的语法非常简单,对于简单的配置来说,它是非常直观的。
缺点
树状结构的复杂性:对于复杂的配置,尤其是层级结构的数据,properties文件可能会变得难以阅读和维护。类型不明确:properties文件中的所有值都是字符串,这意味着在将它们赋值给配置类中的不同类型字段时,需要手动进行类型转换。
yml配置文件★
介绍
YAML是“YAML Ain’t Markup Language”(递归缩写为“YAML不是标记语言”)的缩写,它是一种直观的数据序列化格式,可以被用于配置文件。
YAML使用空白字符(空格和缩进)来表示结构层次,它比properties文件更适合表示复杂的配置数据,实际开发基本都使用yml配置文件,有的程序员甚至在创建springboot工程后第一件事就是把配置文件的后缀改为yml。
适合复杂的、具有层级结构的配置场景,尤其是当你需要配置大量的、相关的配置项时。
优缺点
优点:
清晰的层次结构:YAML使用缩进来表示层级关系,这使得表示复杂的数据结构变得非常清晰。类型支持:YAML支持多种数据类型,如字符串、数字、布尔值等,并且可以自动将值转换为适当的类型。可读性强:YAML文件通常更易于阅读和理解,尤其是对于具有复杂层次结构的配置。
缺点:
轻微的复杂性:YAML的语法比properties文件稍微复杂一些,初学者可能需要一些时间来适应。
yml基本语法
- 大小写敏感
- 数值前必须有空格,作为分隔符
- 使用缩进表示层级关系,缩进时,不允许使用tab键,只能使用空格
- 缩进的空格数不重要,只要相同层级的元素左侧对齐即可
- #表示注解
server:# 修改springboot工程运行端口port: 8081
#驱动类名称
spring: datasource: # 设置数据库驱动 driver-class-name: com.mysql.cj.jdbc.Driver # 设置数据库地址url: jdbc:mysql://localhost:3306/tlias username: root password: 123456 servlet: multipart: enabled: true max-file-size: 10MB max-request-size: 100MB #配置mybatis的日志, 指定输出到控制台
mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true
用户自定义内容
- 对象(map): 键值对的集合
person:name: zhangsan
# 行内写法
person: {name: zhangsan}
- 数组: 一组按次序排序的值
address:- beijing- shanghai
# 行内写法
address: [beijing,shanghai]
- 纯量: 不可分割的值
s1: '123 \n 456' # 单引号不会被转义
s2: "123 \n 456" # 双引号会被转义
- 参数引用
name: zhangsan
person:name: ${name}
获取自定义值
- @Value
@Value("${person1.name}")private String name;@Value("${address1[0]}")private String a1;@Value("${s1}")private String s1;@Value("${s2}")private String s2;@Testvoid test() {System.out.println(name);System.out.println(a1);System.out.println(s1);System.out.println(s2);}
- Envirment
@Autowiredprivate Environment env;@Testvoid test() {System.out.println(env.getProperty("person1.name"));System.out.println(env.getProperty("address1[0]"));System.out.println(env.getProperty("s1"));System.out.println(env.getProperty("s2"));}
- @ConfigurationProperties
先在pom.xml中添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
创建配置类
@Data //lombok
@Component //添加到组件
@ConfigurationProperties(prefix = "person1")//绑定配置文件中配置类
public class Person {private String name;private int age;private String[] address;
}
在测试类中使用
@Autowiredprivate Person person;@Testvoid test() {System.out.println(person.getName());}
Profile
介绍:profiles是不同配置选项的集合,它们对应于应用程序的不同运行环境,如开发环境、测试环境和生产环境。每个环境可能需要不同的设置,例如数据库连接、API端点、服务地址等。
使用:
- 在application.yml中,添加spring.profiles.active属性可以指定默认使用的配置环境
- 在application.yml中可以使用
${...}
指定需要使用的配置
例如:
server:port: 8080spring:profiles:# 指定 默认使用的配置环境active: devmain:allow-circular-references: truedatasource:druid:driver-class-name: ${sky.datasource.driver-class-name}url: jdbc:mysql://${sky.datasource.host}:${sky.datasource.port}/${sky.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: ${sky.datasource.username}password: ${sky.datasource.password}
sky:datasource:driver-class-name: com.mysql.cj.jdbc.Driverhost: localhostport: 3306database: sky_take_outusername: rootpassword: 123456
配置加载顺序
内部配置
- file:./config/:当前项目下的/config目录下
- file:./当前项目的根目录
- classpath:/config/classpath的/config目录
- classpath:.classpath的根目录
加载顺序为上面的排列顺序,高优先级配置的属性会生效
外部配置
注意:当前项目下的/config目录下的配置文件和当前项目的根目录的配置文件因为不符合maven结构,不会被打入jar包
- java -jar xxxx.jar --springboot.port=端口号
- java -jar xxxx.jar --springboot.config.location=配置文件路径
- 将配置文件写在target根目录或target目录的config目录(比前面优先级高)下,可以使配置文件直接被读取