
优先级:properties>yml>yaml
在Spring Boot项目中,pom.xml文件是Maven项目对象模型(Project Object Model)的定义文件,它用于管理项目的构建、依赖和插件。
Maven是一个流行的自动化构建工具,它通过pom.xml文件来执行构建过程。本教程全部项目都使用Maven构建。
下面是一个基本的pom.xml文件的结构和各个部分的解释:
- "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.0modelVersion>
- <groupId>com.examplegroupId>
- <artifactId>my-spring-boot-appartifactId>
- <version>1.0-SNAPSHOTversion>
- <name>My Spring Boot Appname>
- <description>Spring Boot 3 example projectdescription>
-
-
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>3.0.0version>
- parent>
-
-
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
-
- dependencies>
-
-
- <build>
- <plugins>
-
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
-
-
- plugins>
- build>
-
- project>
注意事项:
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文件中的所有值都是字符串,这意味着在将它们赋值给配置类中的不同类型字段时,需要手动进行类型转换。
YAML是“YAML Ain’t Markup Language”(递归缩写为“YAML不是标记语言”)的缩写,它是一种直观的数据序列化格式,可以被用于配置文件。
YAML使用空白字符(空格和缩进)来表示结构层次,它比properties文件更适合表示复杂的配置数据,实际开发基本都使用yml配置文件,有的程序员甚至在创建springboot工程后第一件事就是把配置文件的后缀改为yml。
适合复杂的、具有层级结构的配置场景,尤其是当你需要配置大量的、相关的配置项时。
优点:
清晰的层次结构:YAML使用缩进来表示层级关系,这使得表示复杂的数据结构变得非常清晰。类型支持:YAML支持多种数据类型,如字符串、数字、布尔值等,并且可以自动将值转换为适当的类型。可读性强:YAML文件通常更易于阅读和理解,尤其是对于具有复杂层次结构的配置。
缺点:
轻微的复杂性:YAML的语法比properties文件稍微复杂一些,初学者可能需要一些时间来适应。
- 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
- 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("${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);
- }
- @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"));
- }
先在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());
- }
介绍:profiles是不同配置选项的集合,它们对应于应用程序的不同运行环境,如开发环境、测试环境和生产环境。每个环境可能需要不同的设置,例如数据库连接、API端点、服务地址等。
使用:
${...}指定需要使用的配置例如:
- 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
加载顺序为上面的排列顺序,高优先级配置的属性会生效
注意:当前项目下的/config目录下的配置文件和当前项目的根目录的配置文件因为不符合maven结构,不会被打入jar包