清茶书香

一杯清茶,一本书籍,一个下午。


  • 首页

  • 归档

  • 分类

  • 关于

  • 搜索
Redis JPA Solr SpringData SpringMVC localRepository local Mapper 事务 Mybatis JDBC AOP DI IOC 常用函数 触发器 存储过程 Promise Gateway SpringCloud vue-cli axios es6 webpack npm vue 个性化 zsh 终端 caffeine jvm缓存 guava cache validation Mapping MapStruct comment 小程序 建站 WeHalo config logback plugins database idea maven spring https http nginx password RabbitMQ 秒杀系统 Windows MySQL 数据备份 halo SpringBoot shell Linux ip Optional Stream Lambda k8s Docker 列编辑 vim MacOS 图片合成 Java 远程联调 nps 内网穿透

了解SpringBoot配置文件

发表于 2019-07-23 | 分类于 springboot | 0 | 阅读次数 192

配置文件

SpringBoot默认会从以下几个位置加载配置文件application.properties(或application.yml):

1、当前目录下的配置文件子目录:与xx.java同级的config\xxx.properties
2、当前文件夹:与xxx.java同级的xxx.properties
3、类路径下的配置文件子目录:classtpath:/config/xxx.properties
4、类路径下(classpath:根路径):classtpath:xxx.properties

上面的列表按数字大小分优先级,数字越小,优先级越高;同优先级时application.properties文件比application.yml文件优先级高

如果配置文件的名称不是默认的,可以通过spring.config.name属性指定配置名称

如果配置文件的路径不是默认路径,可以通过spring.config.location属性指定

profile

spring boot支持多环境属性配置,在开发时我们往往会使用多套的属性,开发时用一套属性的值、测试时一套、发布时又用一套,所以就需要配置不同的环境来应对这种变换。

我们可以命名时在使用 在文件名称中添加profile参数,类似下面这种(下面是以YML文件为例,properties文件也是同样的,使用properties文件的规则即可)

  • application-dev.yml
  • application-test.yml
  • application-prod.yml

然后在主配置文件application.yml中指定需要使用哪一套配置文件中的属性值

spring:
  profiles:
    # active: dev  #直接在配置中写死,指定用dev这套配置
    active: @profileName@ #maven打包时(maven package -P profile)指定的profile,会自动替换掉这里的占位符

启用指定的profile配置

spring boot命令行启动时指定profile
java -jar xxxx.jar -spring.profiles.active=test 
maven打包时指定profile

使用这种方式需要在pom文件中添加下面的这些设置

<!-- 配置maven打包时-P参数支持哪些profile -->
<profiles>
    <!-- 开发环境 -->
    <profile>
        <id>dev</id>
        <properties>
            <profileName>dev</profileName>
        </properties>
        <!-- 如果打包时没有指定-P参数,默认使用activeByDefault为true的profile -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 测试环境 -->
    <profile>
        <id>test</id>
        <properties>
            <profileName>test</profileName>
        </properties>
    </profile>
    <!-- 生产环境 -->
    <profile>
        <id>prod</id>
        <properties>
            <profileName>prod</profileName>
        </properties>
    </profile>
</profiles>
<build>
    <plugins>
<!-- maven resource插件功能: 主要是操作配置文件相关。比如用maven中的变量替换项目中配置文件中的占位符,显示指定非maven标准resources目录为resources -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <!-- 指定配置文件中的占位符是@ -->
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>
    </plugins>
</build>

有了上面的配置之后就可以适用maven的命令来控制要使用的环境

maven clean package -Dmaven.test.skip=true -P dev

代表打包时启用dev(开发)环境的配置,其实有了这个插件就可以不使用maven的命令来启用环境的配置,如下图所示

maven资源管理插件

直接在配置文件中写死

在application.yml中通过下面的属性

spring:
  profiles:
    active: dev  #直接在配置中写死,指定用dev这套配置

写死的方式指定要启用的profile(只适合开发环境)

支持的属性清单

由于官方给出的支持的属性清单内容非常多,所以这里就不一一展示了,需要使用的同学通过下面的传送门去查阅

传送门:官方配置属性清单

类型安全的Properties读取

当系统中参数值很多时,我们往往会将配置参数分门别类,然后通过@ConfigurationProperties注解直接将读取到的值封装到一个JavaBean上

示例

在src/main/resources下新建config.properties

demo.phone=10086
demo.wife=self

创建ConfigBeanProp类并注入config.properties中的值:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 注:本类只是演示怎么读取自定义的配置文件,数据源还是直接通过Spring通过类型安全方式直接将读取到的属性封
 * 装到POJO类上省去了在每个属性上写@Value注解。适用于属性比较多,都以指定前缀开始的属性读取
 *
 * @author 召
 */

@Component
@ConfigurationProperties(prefix = "demo")
@PropertySource(value = "config.properties")
public class ConfigBeanProp {

    private String phone;
    private String wife;
    
    /** 
    * 省略Set、Get方法
    */
}

@Value注解读取application.properties参数

还是使用上面的例子,上面的方式适用的是属性很多,但是有共同的前缀。而@Value注解更多是应用于属性很少,或者没有共同的前缀的方式。

@Component
@PropertySource(value = "config.properties")
public class ConfigBeanProp {

    @Value("${demo.phone}")
    private String phone;
    
    @Value("${demo.wife}")
    private String wife;
    
    /** 
    * 省略Set、Get方法
    */
}

设置日志级别

logging:
  level:
    root: info # 设置全局日志显示info级和info级以上
    org.hibernate: ERROR # 设置这个包中的文件的日志显示ERROR级和ERROR级以上的
    org.springframework.web: DEBUG # 设置这个包中的文件的日志显示DEBUG级和DEBUG以上级的
Bennett wechat
欢迎收藏我的微信小程序,方便查看更新的文章。
  • 本文作者: Bennett
  • 本文链接: https://hibennett.cn/archives/springboot-application-properties
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# SpringBoot # spring
SpringBoot整合Sping MVC
了解Spring Data(二)之Solr搜索引擎
  • 文章目录
  • 站点概览
Bennett

Bennett

60 日志
28 分类
74 标签
RSS
Github E-mail Gitee QQ
Creative Commons
Links
  • MacWk
  • 知了
0%
© 2020 — 2023 hibennett.cn版权所有
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4

浙公网安备 33010802011246号

    |    浙ICP备2020040857号-1