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;
@Test
void test() {
System.out.println(name);
System.out.println(a1);
System.out.println(s1);
System.out.println(s2);
}
- Envirment
@Autowired
private Environment env;
@Test
void 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;
}
在测试类中使用
@Autowired
private Person person;
@Test
void test() {
System.out.println(person.getName());
}
Profile
介绍:profiles是不同配置选项的集合,它们对应于应用程序的不同运行环境,如开发环境、测试环境和生产环境。每个环境可能需要不同的设置,例如数据库连接、API端点、服务地址等。
使用:
- 在application.yml中,添加spring.profiles.active属性可以指定默认使用的配置环境
- 在application.yml中可以使用
${...}
指定需要使用的配置
例如:
server:
port: 8080
spring:
profiles:
# 指定 默认使用的配置环境
active: dev
main:
allow-circular-references: true
datasource:
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=true
username: ${sky.datasource.username}
password: ${sky.datasource.password}
sky:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
host: localhost
port: 3306
database: sky_take_out
username: root
password: 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目录(比前面优先级高)下,可以使配置文件直接被读取