学习spring-boot(二)之配置管理

本篇来学习spring boot项目如何来正确配置。
spring-boot的配置文件默认是application.properties, 但我建议大家使用application.yml,因为spring-boot的官方配置文档都用的是.yml。其中这里是一份关于yaml,也就是.yml教程

配置的顺序和优先级

要了解spring-boot的配置,那就必须要了解spring 配置文件加载的顺序和优先级
由于上面文档是英文,特翻译一下,但由于更新等问题,还是建议查阅官方文档
先放上英文原文:

  1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).
  2. @TestPropertySource
    annotations on your tests.
  3. @SpringBootTest#properties
    annotation attribute on your tests.
  4. Command line arguments.
  5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)
  6. ServletConfig init parameters.
  7. ServletContext init parameters.
  8. JNDI attributes from java:comp/env.
  9. Java System properties (System.getProperties()).
  10. OS environment variables.
  11. A RandomValuePropertySource, that only has properties in random.*.
  12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)
  13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
  14. Application properties outside of your packaged jar (application.properties and YAML variants).
  15. Application properties packaged inside your jar (application.properties and YAML variants).
  16. @PropertySource annotations on your @Configuration classes.
  17. Default properties (specified using SpringApplication.setDefaultProperties).

中文版:

  1. 开发工具的配置项
  2. 测试配置项
  3. 测试配置项
  4. 命令行参数, 例如java -jar app.jar --name="Spring"
  5. 命令行中的SPRING_APPLICATION_JSONJSON字符串, 例如java -Dspring.application.json='{"foo":"bar"}' -jar myapp.jar
  6. ServletConfig 初始化参数,可在代码进行配置
  7. ServletContext 初始化参数,可在代码进行配置
  8. JNDI参数, 例如java:comp/env/spring.application.json
  9. Java系统参数
  10. 操作系统参数
  11. Random生产参数,仅仅匹配random.*。例如my.number=${random.int} my.number.in.range=${random.int[1024,65536]}
  12. jar外部的带指定profile的application.yml,比如application-{profile}.yml
  13. jar内部的带指定profile的application.yml,比如application-{profile}.yml
  14. jar外部的application.yml
  15. jar内部的application.yml
  16. 在自定义的@Configuration类中定于的@PropertySource
  17. 启动的main方法中,定义的默认配置。SpringApplication.setDefaultProperties

有哪些配置可以使用

要搞清楚在application.yml中有哪些配置可用,就必须要了解spring配置文件是如何去解析的。
通过研究代码发现如下顺序和加载列表

main:12, ShallyCoreApplication (com.piggsoft)
run:1175, SpringApplication (org.springframework.boot)
run:1186, SpringApplication (org.springframework.boot)
run:315, SpringApplication (org.springframework.boot)
refreshContext:371, SpringApplication (org.springframework.boot)
refresh:761, SpringApplication (org.springframework.boot)
refresh:122, EmbeddedWebApplicationContext (org.springframework.boot.context.embedded)
refresh:524, AbstractApplicationContext (org.springframework.context.support)
invokeBeanFactoryPostProcessors:686, AbstractApplicationContext (org.springframework.context.support)
invokeBeanFactoryPostProcessors:93, PostProcessorRegistrationDelegate (org.springframework.context.support)
invokeBeanDefinitionRegistryPostProcessors:270, PostProcessorRegistrationDelegate (org.springframework.context.support)
postProcessBeanDefinitionRegistry:246, ConfigurationClassPostProcessor (org.springframework.context.annotation)
processConfigBeanDefinitions:324, ConfigurationClassPostProcessor (org.springframework.context.annotation)
parse:184, ConfigurationClassParser (org.springframework.context.annotation) 其中166行为导入用户配置
processDeferredImportSelectors:475, ConfigurationClassParser (org.springframework.context.annotation)

查询classpath下,所有的META-INF/spring.factories,然后得出

0 = "org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration"
1 = "org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration"
2 = "org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration"
3 = "org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration"
4 = "org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration"
5 = "org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration"
6 = "org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration"
7 = "org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration"
8 = "org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration"
9 = "org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration"
10 = "org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration"
11 = "org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration"
12 = "org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration"
13 = "org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration"
14 = "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
15 = "org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration"
16 = "org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration"
17 = "org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration"
18 = "org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration"
19 = "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration"
20 = "org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration"
21 = "org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration"
22 = "org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration"
23 = "org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration"
24 = "org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration"
25 = "org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration"
26 = "org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration"
27 = "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration"
28 = "org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration"
29 = "org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration"
30 = "org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration"
31 = "org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration"
32 = "org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration"
33 = "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration"
34 = "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration"
35 = "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration"
36 = "org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration"
37 = "org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration"
38 = "org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration"
39 = "org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration"
40 = "org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration"
41 = "org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration"
42 = "org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration"
43 = "org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration"
44 = "org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration"
45 = "org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration"
46 = "org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration"
47 = "org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration"
48 = "org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration"
49 = "org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration"
50 = "org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration"
51 = "org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration"
52 = "org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration"
53 = "org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration"
54 = "org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration"
55 = "org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration"
56 = "org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration"
57 = "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration"
58 = "org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration"
59 = "org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration"
60 = "org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration"
61 = "org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration"
62 = "org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration"
63 = "org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfiguration"
64 = "org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration"
65 = "org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration"
66 = "org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration"
67 = "org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration"
68 = "org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration"
69 = "org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration"
70 = "org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration"
71 = "org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration"
72 = "org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration"
73 = "org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration"
74 = "org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration"
75 = "org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration"
76 = "org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration"
77 = "org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration"
78 = "org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration"
79 = "org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration"
80 = "org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration"
81 = "org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration"
82 = "org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration"
83 = "org.springframework.boot.autoconfigure.session.SessionAutoConfiguration"
84 = "org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration"
85 = "org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration"
86 = "org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration"
87 = "org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration"
88 = "org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration"
89 = "org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration"
90 = "org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration"
91 = "org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration"
92 = "org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration"

上面的大部分都是在spring-boot-autoconfigure-xx.jar中.
比如要配置端口之类,那么久去查看org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,通过文档发现其配置指向了org.springframework.boot.autoconfigure.web.ServerProperties,我们就可以通过观察代码来对相关属性进行配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容