springboot配置

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}
获取自定义值
  1. @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);
    }
  1. 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"));
    }
  1. @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端点、服务地址等。

使用:

  1. 在application.yml中,添加spring.profiles.active属性可以指定默认使用的配置环境
  2. 在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

配置加载顺序

内部配置

  1. file:./config/:当前项目下的/config目录下
  2. file:./当前项目的根目录
  3. classpath:/config/classpath的/config目录
  4. classpath:.classpath的根目录

加载顺序为上面的排列顺序,高优先级配置的属性会生效

外部配置

注意:当前项目下的/config目录下的配置文件和当前项目的根目录的配置文件因为不符合maven结构,不会被打入jar包

  1. java -jar xxxx.jar --springboot.port=端口号
  2. java -jar xxxx.jar --springboot.config.location=配置文件路径
  3. 将配置文件写在target根目录或target目录的config目录(比前面优先级高)下,可以使配置文件直接被读取
  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值