Spring Boot加载application.properties配置文件顺序规则
SpringApplication会从以下路径加载所有的application.properties文件:
- 1、file:./config/(当前目录下的config文件夹)
- 2、file:./(当前目录)
- 3、classpath:/config/(classpath下的config目录)
- 4、classpath:/(classpath根目录)
优先级由上至下。
注意:优先级是指属性最后使用的值,而不是说仅仅扫描优先级高的路径,不是发现了application.properties文件就停止。例如classpath:/config/和file:./config/都存在配置文件,那么加载过程会加载classpath:/config/路径下配置文件的所有属性,然后再加载file:./config/路径下配置文件的属性并替换已有的属性。此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。
如果你不想使用application.properties的格式命名配置文件,那么可以通过环境变量spring.config.name来设置文件名称,例如:
$ java -jar myproject.jar --spring.config.name=example-sys.properties此时,要加载的配置文件名为example-sys.properties。除了修改名称,还可以使用 spring.config.location 来添加要加载的路径。例如我们以这个命令启动JVM:$ java -jar myapp.jar --spring.config.location=classpath:/myconfig/,file:./myconfig/
那么加载application.properties文件的路径以及优先级会变为:
- 1、file:./myconfig/
- 2、classpath:/myconfig/
- 3、file:./config/
- 4、file:./
- 5、classpath:/config/
- 6、classpath:/
spring.config.location环境变量也可以直接设定到加载文件的名称,例如:--spring.config.location=classpath:/default.properties
通常情况下这样做并没有太大问题,但是结合到Profiles文件特性时,会导致无法根据标记加载对应的Profiles文件。
由于配置文件路径和配置文件名称在容器未启动时就需要声明,所以最好在OS的环境变量、JVM的系统环境变量或命令行参数就设定它。
注:
"file:"文件路径前缀的相对路径根目录是 用户当前目录(即用户运行jar包时的当前目录)
"classpath:"文件路径前缀的相对路径根目录是 jar包内classes文件夹
- classpath 优先本项目class路径查找,没有的话依次在其他jar包中class路径查找,找到第一个匹配的为止
- classpath* 加载到所有class路径下的配置文件,包括jar包的class路径下,最终加载所有匹配的
- file 通过URL加载,来源为文件系统(注意文件读取权限)
- http 通过URL加载,来源为网络
- (none) 根据 ApplicationContext 进行判断(这个我没试过)
classpath
- <context:property-placeholder location="classpath:system.properties" />
举个栗子:A项目中resources中存在system.properties,B项目中resources中也存在system.properties。A项目以jar包形式引入B项目。此时A项目spring配置classpath:system.properties加载到的是A项目自己的system.properties。但是如果A项目resources中没有system.properties则最终结果加载到的是B.jar中的system.properties
classpath*
- <context:property-placeholder location="classpath*:system.properties" />
举个栗子:A项目中resources中存在system.properties,B项目中resources中也存在system.properties。A项目以jar包形式引入B项目。此时A项目spring配置classpath*:system.properties加载到的是A和B的system.properties
如下图(我是引入的两个jar都有同名配置文件):
这里大家可能会有疑问,同时引入了两个同名配置文件,如果两个同名配置文件中有同样的配置,比如:
A项目system.properties
- milo=a
- milo1=a
B项目system.properties
- milo=b
- milo1=b
那么最终引用的是哪个?我这边最终实验结果是根据spring加载顺序倒叙加载,直到找到匹配的值。而且值与值之间不影响,每次都按加载顺序倒叙查找。即:如果spring加载顺序为A->B ,那么最终取到的值为:milo=b milo1=b。而且spring在取milo和milo1时都是按照spring加载顺序倒叙取得。大家可以通过三个配置文件情况做下试验。对spring熟悉的同学也可找下源码看一下。
附:
application.properties参数详解
- # ----------------------------------------
- # CORE PROPERTIES
- # ----------------------------------------
- # SPRING 相关配置 (ConfigFileApplicationListener)
- spring.config.name= # config file name (default to 'application')
- spring.config.location= # location of config file
- # profile相关配置
- spring.profiles= # comma list of active profiles
- # 系统配置相关参数 (SpringApplication)
- spring.main.sources=
- spring.main.web-environment= # detect by default
- spring.main.show-banner=true
- spring.main....= # see class for all properties
- # 日志配置相关参数
- logging.path=/var/logs
- logging.file=myapp.log
- logging.config=
- # IDENTITY (ContextIdApplicationContextInitializer)
- spring.application.name=
- spring.application.index=
- # tomcat相关配置参数 (ServerProperties)
- server.port=8080
- server.address= # bind to a specific NIC
- server.session-timeout= # session timeout in seconds
- server.context-path= # the context path, defaults to '/'
- server.servlet-path= # the servlet path, defaults to '/'
- server.tomcat.access-log-pattern= # log pattern of the access log
- server.tomcat.access-log-enabled=false # is access logging enabled
- server.tomcat.protocol-header=x-forwarded-proto # ssl forward headers
- server.tomcat.remote-ip-header=x-forwarded-for
- server.tomcat.basedir=/tmp # base dir (usually not needed, defaults to tmp)
- server.tomcat.background-processor-delay=30; # in seconds
- server.tomcat.max-threads = 0 # number of threads in protocol handler
- server.tomcat.uri-encoding = UTF-8 # character encoding to use for URL decoding
- # springmvc相关配置参数 (HttpMapperProperties)
- http.mappers.json-pretty-print=false # pretty print JSON
- http.mappers.json-sort-keys=false # sort keys
- spring.mvc.locale= # set fixed locale, e.g. en_UK
- spring.mvc.date-format= # set fixed date format, e.g. dd/MM/yyyy
- spring.mvc.message-codes-resolver-format= # PREFIX_ERROR_CODE / POSTFIX_ERROR_CODE
- spring.view.prefix= # MVC view prefix
- spring.view.suffix= # ... and suffix
- spring.resources.cache-period= # cache timeouts in headers sent to browser
- spring.resources.add-mappings=true # if default mappings should be added
- # thymeleaf相关配置参数 (ThymeleafAutoConfiguration)
- spring.thymeleaf.prefix=classpath:/templates/
- spring.thymeleaf.suffix=.html
- spring.thymeleaf.mode=HTML5
- spring.thymeleaf.encoding=UTF-8
- spring.thymeleaf.content-type=text/html # ;charset=<encoding> is added
- spring.thymeleaf.cache=true # set to false for hot refresh
- # freemark相关配置参数 (FreeMarkerAutoConfiguration)
- spring.freemarker.allowRequestOverride=false
- spring.freemarker.allowSessionOverride=false
- spring.freemarker.cache=true
- spring.freemarker.checkTemplateLocation=true
- spring.freemarker.contentType=text/html
- spring.freemarker.exposeRequestAttributes=false
- spring.freemarker.exposeSessionAttributes=false
- spring.freemarker.exposeSpringMacroHelpers=false
- spring.freemarker.prefix=
- spring.freemarker.requestContextAttribute=
- spring.freemarker.settings.*=
- spring.freemarker.suffix=.ftl
- spring.freemarker.templateEncoding=UTF-8
- spring.freemarker.templateLoaderPath=classpath:/templates/
- spring.freemarker.viewNames= # whitelist of view names that can be resolved
- # groovy模板相关配置参数 (GroovyTemplateAutoConfiguration)
- spring.groovy.template.allowRequestOverride=false
- spring.groovy.template.allowSessionOverride=false
- spring.groovy.template.cache=true
- spring.groovy.template.configuration.*= # See Groovy's TemplateConfiguration
- spring.groovy.template.contentType=text/html
- spring.groovy.template.prefix=classpath:/templates/
- spring.groovy.template.suffix=.tpl
- spring.groovy.template.templateEncoding=UTF-8
- spring.groovy.template.viewNames= # whitelist of view names that can be resolved
- # velocity模板相关配置参数 (VelocityAutoConfiguration)
- spring.velocity.allowRequestOverride=false
- spring.velocity.allowSessionOverride=false
- spring.velocity.cache=true
- spring.velocity.checkTemplateLocation=true
- spring.velocity.contentType=text/html
- spring.velocity.dateToolAttribute=
- spring.velocity.exposeRequestAttributes=false
- spring.velocity.exposeSessionAttributes=false
- spring.velocity.exposeSpringMacroHelpers=false
- spring.velocity.numberToolAttribute=
- spring.velocity.prefix=
- spring.velocity.properties.*=
- spring.velocity.requestContextAttribute=
- spring.velocity.resourceLoaderPath=classpath:/templates/
- spring.velocity.suffix=.vm
- spring.velocity.templateEncoding=UTF-8
- spring.velocity.viewNames= # whitelist of view names that can be resolved
- # INTERNATIONALIZATION (MessageSourceAutoConfiguration)
- spring.messages.basename=messages
- spring.messages.cacheSeconds=-1
- spring.messages.encoding=UTF-8
- # 安全相关配置参数 (SecurityProperties)
- security.user.name=user # login username
- security.user.password= # login password
- security.user.role=USER # role assigned to the user
- security.require-ssl=false # advanced settings ...
- security.enable-csrf=false
- security.basic.enabled=true
- security.basic.realm=Spring
- security.basic.path= # /**
- security.headers.xss=false
- security.headers.cache=false
- security.headers.frame=false
- security.headers.contentType=false
- security.headers.hsts=all # none / domain / all
- security.sessions=stateless # always / never / if_required / stateless
- security.ignored=false
- # 数据源相关配置参数(DataSourceAutoConfiguration & DataSourceProperties)
- spring.datasource.name= # name of the data source
- spring.datasource.initialize=true # populate using data.sql
- spring.datasource.schema= # a schema (DDL) script resource reference
- spring.datasource.data= # a data (DML) script resource reference
- spring.datasource.platform= # the platform to use in the schema resource (schema-${platform}.sql)
- spring.datasource.continueOnError=false # continue even if can't be initialized
- spring.datasource.separator=; # statement separator in SQL initialization scripts
- spring.datasource.driverClassName= # JDBC Settings...
- spring.datasource.url=
- spring.datasource.username=
- spring.datasource.password=
- spring.datasource.max-active=100 # Advanced configuration...
- spring.datasource.max-idle=8
- spring.datasource.min-idle=8
- spring.datasource.initial-size=10
- spring.datasource.validation-query=
- spring.datasource.test-on-borrow=false
- spring.datasource.test-on-return=false
- spring.datasource.test-while-idle=
- spring.datasource.time-between-eviction-runs-millis=
- spring.datasource.min-evictable-idle-time-millis=
- spring.datasource.max-wait-millis=
- # mongdb相关配置参数 (MongoProperties)
- spring.data.mongodb.host= # the db host
- spring.data.mongodb.port=27017 # the connection port (defaults to 27107)
- spring.data.mongodb.uri=mongodb://localhost/test # connection URL
- spring.data.mongo.repositories.enabled=true # if spring data repository support is enabled
- # springDataJPA相关配置参数(JpaBaseConfiguration, HibernateJpaAutoConfiguration)
- spring.jpa.properties.*= # properties to set on the JPA connection
- spring.jpa.openInView=true
- spring.jpa.show-sql=true
- spring.jpa.database-platform=
- spring.jpa.database=
- spring.jpa.generate-ddl=false # ignored by Hibernate, might be useful for other vendors
- spring.jpa.hibernate.naming-strategy= # naming classname
- spring.jpa.hibernate.ddl-auto= # defaults to create-drop for embedded dbs
- spring.data.jpa.repositories.enabled=true # if spring data repository support is enabled
- # solr相关配置参数(SolrProperties})
- spring.data.solr.host=http://127.0.0.1:8983/solr
- spring.data.solr.zkHost=
- spring.data.solr.repositories.enabled=true # if spring data repository support is enabled
- # elasticsearch相关配置参数(ElasticsearchProperties})
- spring.data.elasticsearch.cluster-name= # The cluster name (defaults to elasticsearch)
- spring.data.elasticsearch.cluster-nodes= # The address(es) of the server node (comma-separated; if not specified starts a client node)
- spring.data.elasticsearch.local=true # if local mode should be used with client nodes
- spring.data.elasticsearch.repositories.enabled=true # if spring data repository support is enabled
- # flyway相关配置参数(FlywayProperties)
- flyway.locations=classpath:db/migrations # locations of migrations scripts
- flyway.schemas= # schemas to update
- flyway.initVersion= 1 # version to start migration
- flyway.prefix=V
- flyway.suffix=.sql
- flyway.enabled=true
- flyway.url= # JDBC url if you want Flyway to create its own DataSource
- flyway.user= # JDBC username if you want Flyway to create its own DataSource
- flyway.password= # JDBC password if you want Flyway to create its own DataSource
- # liquibase相关配置参数(LiquibaseProperties)
- liquibase.change-log=classpath:/db/changelog/db.changelog-master.yaml
- liquibase.contexts= # runtime contexts to use
- liquibase.default-schema= # default database schema to use
- liquibase.drop-first=false
- liquibase.enabled=true
- # JMX
- spring.jmx.enabled=true # Expose MBeans from Spring
- # rabbitmq相关配置参数(RabbitProperties)
- spring.rabbitmq.host= # connection host
- spring.rabbitmq.port= # connection port
- spring.rabbitmq.addresses= # connection addresses (e.g. myhost:9999,otherhost:1111)
- spring.rabbitmq.username= # login user
- spring.rabbitmq.password= # login password
- spring.rabbitmq.virtualhost=
- spring.rabbitmq.dynamic=
- # redis相关配置参数(RedisProperties)
- spring.redis.host=localhost # server host
- spring.redis.password= # server password
- spring.redis.port=6379 # connection port
- spring.redis.pool.max-idle=8 # pool settings ...
- spring.redis.pool.min-idle=0
- spring.redis.pool.max-active=8
- spring.redis.pool.max-wait=-1
- # activemq相关配置参数(ActiveMQProperties)
- spring.activemq.broker-url=tcp://localhost:61616 # connection URL
- spring.activemq.user=
- spring.activemq.password=
- spring.activemq.in-memory=true # broker kind to create if no broker-url is specified
- spring.activemq.pooled=false
- # hornetq相关配置参数(HornetQProperties)
- spring.hornetq.mode= # connection mode (native, embedded)
- spring.hornetq.host=localhost # hornetQ host (native mode)
- spring.hornetq.port=5445 # hornetQ port (native mode)
- spring.hornetq.embedded.enabled=true # if the embedded server is enabled (needs hornetq-jms-server.jar)
- spring.hornetq.embedded.serverId= # auto-generated id of the embedded server (integer)
- spring.hornetq.embedded.persistent=false # message persistence
- spring.hornetq.embedded.data-directory= # location of data content (when persistence is enabled)
- spring.hornetq.embedded.queues= # comma separate queues to create on startup
- spring.hornetq.embedded.topics= # comma separate topics to create on startup
- spring.hornetq.embedded.cluster-password= # customer password (randomly generated by default)
- # JMS (JmsProperties)
- spring.jms.pub-sub-domain= # false for queue (default), true for topic
- # springbatch相关配置参数(BatchDatabaseInitializer)
- spring.batch.job.names=job1,job2
- spring.batch.job.enabled=true
- spring.batch.initializer.enabled=true
- spring.batch.schema= # batch schema to load
- # aop相关配置参数
- spring.aop.auto=
- spring.aop.proxy-target-class=
- # FILE ENCODING (FileEncodingApplicationListener)
- spring.mandatory-file-encoding=false
- # SPRING SOCIAL (SocialWebAutoConfiguration)
- spring.social.auto-connection-views=true # Set to true for default connection views or false if you provide your own
- # SPRING SOCIAL FACEBOOK (FacebookAutoConfiguration)
- spring.social.facebook.app-id= # your application's Facebook App ID
- spring.social.facebook.app-secret= # your application's Facebook App Secret
- # SPRING SOCIAL LINKEDIN (LinkedInAutoConfiguration)
- spring.social.linkedin.app-id= # your application's LinkedIn App ID
- spring.social.linkedin.app-secret= # your application's LinkedIn App Secret
- # SPRING SOCIAL TWITTER (TwitterAutoConfiguration)
- spring.social.twitter.app-id= # your application's Twitter App ID
- spring.social.twitter.app-secret= # your application's Twitter App Secret
- # SPRING MOBILE SITE PREFERENCE (SitePreferenceAutoConfiguration)
- spring.mobile.sitepreference.enabled=true # enabled by default
- # SPRING MOBILE DEVICE VIEWS (DeviceDelegatingViewResolverAutoConfiguration)
- spring.mobile.devicedelegatingviewresolver.enabled=true # disabled by default
- spring.mobile.devicedelegatingviewresolver.normalPrefix=
- spring.mobile.devicedelegatingviewresolver.normalSuffix=
- spring.mobile.devicedelegatingviewresolver.mobilePrefix=mobile/
- spring.mobile.devicedelegatingviewresolver.mobileSuffix=
- spring.mobile.devicedelegatingviewresolver.tabletPrefix=tablet/
- spring.mobile.devicedelegatingviewresolver.tabletSuffix=
- # ----------------------------------------
- # ACTUATOR PROPERTIES
- # ----------------------------------------
- # MANAGEMENT HTTP SERVER (ManagementServerProperties)
- management.port= # defaults to 'server.port'
- management.address= # bind to a specific NIC
- management.contextPath= # default to '/'
- # ENDPOINTS (AbstractEndpoint subclasses)
- endpoints.autoconfig.id=autoconfig
- endpoints.autoconfig.sensitive=true
- endpoints.autoconfig.enabled=true
- endpoints.beans.id=beans
- endpoints.beans.sensitive=true
- endpoints.beans.enabled=true
- endpoints.configprops.id=configprops
- endpoints.configprops.sensitive=true
- endpoints.configprops.enabled=true
- endpoints.configprops.keys-to-sanitize=password,secret
- endpoints.dump.id=dump
- endpoints.dump.sensitive=true
- endpoints.dump.enabled=true
- endpoints.env.id=env
- endpoints.env.sensitive=true
- endpoints.env.enabled=true
- endpoints.health.id=health
- endpoints.health.sensitive=false
- endpoints.health.enabled=true
- endpoints.info.id=info
- endpoints.info.sensitive=false
- endpoints.info.enabled=true
- endpoints.metrics.id=metrics
- endpoints.metrics.sensitive=true
- endpoints.metrics.enabled=true
- endpoints.shutdown.id=shutdown
- endpoints.shutdown.sensitive=true
- endpoints.shutdown.enabled=false
- endpoints.trace.id=trace
- endpoints.trace.sensitive=true
- endpoints.trace.enabled=true
- # MVC ONLY ENDPOINTS
- endpoints.jolokia.path=jolokia
- endpoints.jolokia.sensitive=true
- endpoints.jolokia.enabled=true # when using Jolokia
- endpoints.error.path=/error
- # JMX ENDPOINT (EndpointMBeanExportProperties)
- endpoints.jmx.enabled=true
- endpoints.jmx.domain= # the JMX domain, defaults to 'org.springboot'
- endpoints.jmx.unique-names=false
- endpoints.jmx.enabled=true
- endpoints.jmx.staticNames=
- # JOLOKIA (JolokiaProperties)
- jolokia.config.*= # See Jolokia manual
- # REMOTE SHELL
- shell.auth=simple # jaas, key, simple, spring
- shell.command-refresh-interval=-1
- shell.command-path-pattern= # classpath*:/commands/**, classpath*:/crash/commands/**
- shell.config-path-patterns= # classpath*:/crash/*
- shell.disabled-plugins=false # don't expose plugins
- shell.ssh.enabled= # ssh settings ...
- shell.ssh.keyPath=
- shell.ssh.port=
- shell.telnet.enabled= # telnet settings ...
- shell.telnet.port=
- shell.auth.jaas.domain= # authentication settings ...
- shell.auth.key.path=
- shell.auth.simple.user.name=
- shell.auth.simple.user.password=
- shell.auth.spring.roles=
- # GIT INFO
- spring.git.properties= # resource ref to generated git info properties file
参考文献:
SpringBoot配置文件application.properties参数详解
Spring Boot学习总结(13)——Spring Boot加载application.properties配置文件顺序规则
Spring Boot加载application.properties配置文件顺序规则的更多相关文章
- Spring Boot 加载application.properties顺序
1.准备四份application.properties a.项目根目录下config/application.properties ,内容为: test.user.name = a b.项目根目录 ...
- eclips环境下开发spring boot项目,application.properties配置文件下中文乱码解决方案
如以上,application.properties文件下中文乱码.发生乱码一般都是由于编码格式不一样导致的. 打开Window-Preferences-General-content Types-T ...
- spring boot项目,application.properties配置文件下中文乱码解决方案
转自:https://blog.csdn.net/qq_40408534/article/details/79831807 如以上,application.properties文件下中文乱码.发生乱码 ...
- spring boot 加载application配置文件
这就要注意了
- Spring Boot加载配置文件
问题1:Spring如何加载配置,配置文件位置? 1.默认位置: Spring Boot默认的配置文件名称为application.properties,SpringApplication将从以下位置 ...
- 【Java Web开发学习】Spring加载外部properties配置文件
[Java Web开发学习]Spring加载外部properties配置文件 转载:https://www.cnblogs.com/yangchongxing/p/9136505.html 1.声明属 ...
- spring boot 加载配置 文件
在springboot启动的过程中,默契情况下会在classpath路径下加载application.properties当做系统配置文件,但有时候我们想要替换成另一个文件,可以 通过以下方式: ...
- spring boot 加载web容器tomcat流程源码分析
spring boot 加载web容器tomcat流程源码分析 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>o ...
- Eclipse下SpringBoot没有自动加载application.properties文件
Eclipse内创建SpringBoot项目,在java/main/resources文件夹下面创建application.properties配置文件,SpringApplication.run后发 ...
随机推荐
- Python面向对象 | 抽象类和接口类
一.抽象类(规范的编程模式) 什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化.抽象类的本质还是类,指的是一组类的相似性,而接口只强调函数属性的相似性. 为什么要有抽象类 ...
- browserslist详解
https://www.jianshu.com/p/d45a31c50711 https://juejin.im/post/5b8cff326fb9a019fd1474d6 https://githu ...
- IE和火狐的事件机制有什么区别
1.IE的事件流是冒泡流,火狐支持冒泡流和捕获流. 2.阻止事件冒泡:IE---e.cancelBubble = true; 火狐---e.stopPropagation();
- Qt常用类——Qpoint
QPoint 类代表一个坐标点,实现在 QtCore 共享库中.它可以认为是一个整型的横坐标和一个整型的纵坐标的组合. 构造 QPoint 类支持以下两种构造方式: QPoint(); // 构造横纵 ...
- 优先队列优化的 Huffman树 建立
如果用vector实现,在运行时遍历寻找最小的两个节点,时间复杂度为O(N^2) 但是我们可以用priority_queue优化,达到O(N logN)的时间复杂度 需要注意的是priority_qu ...
- 【JZOJ6236】【20190628】启程的日子
题目 给你一个\(n \times m\)的01矩阵 你需要用一些矩阵加减出这个矩阵 求最少的步数,并输出方案 需要满足构造出的01矩阵是一个四联通块 $ n , m \le 500 $ 题解 答案 ...
- 【BZOJ4722】由乃
[BZOJ4722]由乃 题面 bzoj 题解 考虑到区间长度为\(14\)时子集个数\(2^{14}>14\times 1000\),由抽屉原理,区间长度最多为\(13\)(长度大于这个值就一 ...
- CF461B Appleman and Tree
CF461B Appleman and Tree 传送门 一道比较容易的树形DP. 考虑用\(dp[i][1]\)代表将\(i\)分配给\(i\)的子树内黑点的方案数,\(dp[i][0]\)代表将\ ...
- PatchMatchStereo可能会需要的Rectification
在稠密三维重建中,rectification可以简化patch match的过程.在双目特征匹配等场景中其实也用得到,看了一下一篇论文叫< A Compact Algorithm for Rec ...
- Union 与 Union All 区别(抄的W3C School的,抄一遍就记住了!)
Union ,UnionAll 俩都是用来合并两个或以上的查询结果集: Union操作符 :select语句中必须有相同的数列 (相等数量的列,不同结果集同一列的数据类型一致,列的顺序必须相同): u ...