zoukankan      html  css  js  c++  java
  • 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配置文件顺序规则

  • 相关阅读:
    IaaS、PaaS、SaaS
    hyper-V 配置
    解决linux下创建用户时出现Creating mailbox file: File exists
    iframe层级关系调用
    js,jq新增元素 ,on绑定事件无效
    js中!和!!的区别与用法
    form表单禁止button 提交
    Thinkphp5终端创建控制器和模型
    TP5的目录常量和路径
    sublime安装package controlller
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/11170679.html
Copyright © 2011-2022 走看看