- 1 Spring Boot文档
- 1.1 关于这篇文档
- 1.2 获取帮助
- 1.3 第一步
- 1.4 使用Spring Boot
- 1.5 了解Spring Boot功能
- 1.6 转向生产
- 1.7 深入问题
- 2 入门
- 2.1 Spring Boot介绍
- 2.2 系统要求
- 2.3 安装Spring Boot
- 2.4 开发您的第一个Spring Boot应用程序
- 2.5 接下来要阅读的内容
- 3 使用Spring Boot
- 3.1 构建系统
- 3.1.1 依赖管理
- 3.2 结构化您的代码
- 3.3 配置类
- 3.4 自动配置
- 3.5 Spring Beans和依赖注入
- 3.6 使用@SpringBootApplication注解
- 3.7 运行您的应用程序
- 3.8 开发者工具
- 3.9 打包用于生产中的应用
- 3.10 接下来要阅读的内容
- 4 Spring Boot功能
- 4.1 SpringApplication
- 4.2 外部配置
- 4.3 Profiles
- 4.4 日志
- 4.5 国际化
- 4.6 JSON
- 4.7 开发Web应用程序
- 4.8 安全
- 4.9 使用SQL数据库
- 4.10 使用NoSQL技术
- 4.11 缓存
- 4.12 消息
- 4.13 使用RestTemplate调用REST服务
- 4.14 使用WebClient调用REST服务
- 4.15 校验
- 4.16 发送邮件
- 4.17 使用JTA的分布式事务
- 4.18 Hazelcast
- 4.19 Quartz Scheduler
- 4.20 任务执行和调度
- 4.21 Spring Integration
- 4.22 Spring Session
- 4.23 JMX的监控和管理
- 4.23 测试
- 4.25 WebSockets
- 4.26 Web Service
- 4.27 创建自己的自动配置
- 4.28 Kotlin支持
- 4.29 接下来要阅读的内容
- 5 Spring Boot Actuator: 生产就绪功能
- 5.1 启用生产就绪功能
- 5.2 Endpoints
- 5.3 通过HTTP进行监控和管理
- 5.4 JMX的监控和管理
- 5.5 Loggers
- 5.6 Metrics
- 5.7 审计
- 5.8 HTTP跟踪
- 5.9 进程监控
- 5.10 Cloud Foundry支持
- 5.11 接下来要阅读的内容
- 6 部署Spring Boot应用程序
- 6.1 部署到Cloud
- 6.2 安装Spring Boot应用程序
- 6.3 接下来要阅读的内容
- 7 Spring Boot CLI
- 7.1 安装CLI
- 7.2 使用CLI
- 7.3 使用Groovy Bean DSL开发应用程序
- 7.4 使用settings.xml配置CLI
- 7.5 接下来要阅读的内容
- 8 构建工具插件
- 8.1 Spring Boot Maven插件
- 8.2 Spring Boot Gradle插件
- 8.3 Spring Boot AntLib模块
- 8.4 支持其他构建系统
- 8.5 接下来要阅读的内容
- 9 ‘How-to’ 指南
- 9.1 Spring Boot应用
- 9.2 属性和配置
- 9.3 嵌入式Web服务器
- 9.4 Spring MVC
9.2 属性和配置
您可以使用ApplicationBuilder类来创建父/子ApplicationContext层次结构。 有关详细信息,请参阅“Spring Boot功能”部分中的“第4.1.4节”,“Fluent Builder API”。
9.2.1 在构建时自动展开属性
您可以使用现有的构建配置自动扩展它们,而不是硬编码在项目的构建配置中也指定的某些属性。 这在Maven和Gradle都是可行的。
9.2.1.1 使用Maven自动扩展属性
您可以使用资源过滤从Maven项目自动扩展属性。 如果使用spring-boot-starter-parent,则可以使用@ .. @占位符引用Maven的“项目属性”,如以下示例所示:
app.encoding=@project.build.sourceEncoding@
app.java.version=@java.version@
只有生产配置以这种方式过滤(换句话说,不对src/test/resources应用过滤)。
如果启用addResources标志,则spring-boot:run目标可以将src/main/resources直接添加到类路径中(用于热重新加载)。 这样做可以绕过资源过滤和此功能。 相反,您可以使用exec:java目标或自定义插件的配置。 有关详细信息,请参阅插件使用情况页面。
如果不使用starter父级,则需要在pom.xml的元素中包含以下元素:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</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>
如果在配置中使用标准的Spring占位符(例如${placeholder}),则useDefaultDelimiters属性很重要。 如果该属性未设置为false,则可以通过构建扩展这些属性。
9.2.1.2 使用Gradle自动扩展属性
您可以通过配置Java插件的processResources任务来自动扩展Gradle项目中的属性,如以下示例所示:
processResources {
expand(project.properties)
}
然后,您可以使用占位符来引用Gradle项目的属性,如以下示例所示:
app.name=${name}
app.description=${description}
Gradle的expand方法使用Groovy的SimpleTemplateEngine,它可以转换
${..}
标记。${..}
样式与Spring自己的属性占位符机制冲突。 要将Spring属性占位符与自动扩展一起使用,请按如下方式转义Spring属性占位符:\${..}
。
9.2.2 外部化SpringApplication的配置
SpringApplication具有bean属性(主要是setter),因此您可以在创建应用程序时使用其Java API来修改其行为。 或者,您可以通过在spring.main.*中设置属性来外部化配置。 例如,在application.properties中,您可能具有以下设置:
spring.main.web-application-type=none
spring.main.banner-mode=off
然后在启动时不打印Spring Boot横幅,并且应用程序未启动嵌入式Web服务器。
外部配置中定义的属性将覆盖使用Java API指定的值,但用于创建ApplicationContext的源的明显例外。 考虑以下应用程序:
new SpringApplicationBuilder()
.bannerMode(Banner.Mode.OFF)
.sources(demo.MyApp.class)
.run(args);
现在考虑以下配置:
spring.main.sources=com.acme.Config,com.acme.ExtraConfig
spring.main.banner-mode=console
实际应用程序现在显示横幅(由配置覆盖)并使用ApplicationContext的三个源(按以下顺序):demo.MyApp,com.acme.Config和com.acme.ExtraConfig。
9.2.3 更改应用程序的外部属性的位置
默认情况下,来自不同源的属性将按照定义的顺序添加到Spring Environment中(有关确切的顺序,请参阅“Spring Boot features”部分中的“第4.2章,外部化配置”)。
增加和修改此排序的一种好方法是将@PropertySource注释添加到应用程序源。 传递给SpringApplication静态便捷方法的类和使用setSources()添加的类将被检查以查看它们是否具有@PropertySources。 如果这样做,那么这些属性会尽早添加到Environment中,以便在ApplicationContext生命周期的所有阶段中使用。 以这种方式添加的属性的优先级低于使用默认位置(例如application.properties),系统属性,环境变量或命令行添加的属性。
您还可以提供以下系统属性(或环境变量)来更改行为:
- spring.config.name(SPRING_CONFIG_NAME):默认为application作为文件名的根。
- spring.config.location(SPRING_CONFIG_LOCATION):要加载的文件(例如类路径资源或URL)。 为此文档设置了一个单独的Environment属性源,它可以被系统属性,环境变量或命令行覆盖。
无论您在环境中设置什么,Spring Boot始终如上所述加载application.properties。 默认情况下,如果使用YAML,则扩展名为“.yml”的文件也会添加到列表中。
Spring Boot记录在DEBUG级别加载的配置文件以及在TRACE级别找不到的候选项。
有关更多详细信息,请参阅ConfigFileApplicationListener。
9.2.4 使用“短”命令行参数
有些人喜欢使用(例如)--port = 9000而不是--server.port = 9000来在命令行上设置配置属性。 您可以通过在application.properties中使用占位符来启用此行为,如以下示例所示:
server.port=${port:8080}
如果从spring-boot-starter-parent POM继承,则maven-resources-plugins的默认过滤器令牌已从
${*}
更改为@(即@maven.token@而不是$ {maven.token})以防止与Spring样式的占位符冲突。 如果您已直接为application.properties启用了Maven筛选,则可能还需要更改默认筛选器标记以使用其他分隔符。
在这种特定情况下,端口绑定可在Paoku环境(如Heroku或Cloud Foundry)中运行。 在这两个平台中,PORT环境变量自动设置,Spring可以绑定到环境属性的大写同义词。
9.2.5 使用YAML作为外部属性
YAML是JSON的超集,因此,它是以分层格式存储外部属性的便捷语法,如以下示例所示:
spring:
application:
name: cruncher
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
创建一个名为application.yml的文件,并将其放在类路径的根目录中。 然后将snakeyaml添加到依赖项中(Maven坐标org.yaml:snakeyaml,如果使用spring-boot-starter则已包含在内)。 将YAML文件解析为Java Map<String,Object&rt;(类似于JSON对象),并且Spring Boot将Map展平,使其深度为一级并具有句点分隔的键,因为许多人习惯在Java中使用Properties文件 。
上面的示例YAML对应于以下application.properties文件:
spring.application.name=cruncher
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/test
server.port=9000
有关YAML的更多信息,请参见“Spring Boot features”部分中的“第4.2.7节”,“使用YAML而不是属性”。
9.2.6 设置活动的配置文件
Spring Environment有一个API,但你通常会设置一个System属性(spring.profiles.active)或一个OS环境变量(SPRING_PROFILES_ACTIVE)。 此外,您可以使用-D参数启动应用程序(请记住将其放在主类或jar存档之前),如下所示:
$ java -jar -Dspring.profiles.active=production demo-0.0.1-SNAPSHOT.jar
在Spring Boot中,您还可以在application.properties中设置活动配置文件,如以下示例所示:
spring.profiles.active=production
以这种方式设置的值将由System属性或环境变量设置替换,但不会由SpringApplicationBuilder.profiles()方法替换。 因此,后一个Java API可用于扩充配置文件而不更改默认值。
有关详细信息,请参阅“Spring Boot功能”部分中的“第4.3章,配置文件”。
9.2.7 根据环境更改配置
YAML文件实际上是由---行分隔的文档序列,每个文档分别解析为展平的Map。
如果YAML文档包含spring.profiles键,则配置文件值(以逗号分隔的配置文件列表)将输入Spring Environment.acceptsProfiles()方法。 如果这些配置文件中的任何一个处于活动状态,则该文档将包含在最终合并中(否则,它不包含在内),如以下示例所示:
server:
port: 9000
---
spring:
profiles: development
server:
port: 9001
---
spring:
profiles: production
server:
port: 0
在前面的示例中,默认端口为9000。但是,如果名为“development”的Spring配置文件处于活动状态,则端口为9001.如果“production”处于活动状态,则端口为0。
YAML文档按其遇到的顺序合并。 以后的值会覆盖以前的值。
要对属性文件执行相同的操作,可以使用application-${profile}.properties指定特定于配置文件的值。
9.2.8 发现外部属性的内置选项
Spring Boot在运行时将外部属性从application.properties(或.yml文件和其他位置)绑定到应用程序中。 没有(并且在技术上不可能)单个位置中所有受支持属性的详尽列表,因为贡献可以来自类路径上的其他jar文件。
具有Actuator功能的正在运行的应用程序具有configprops端点,该端点显示通过@ConfigurationProperties可用的所有绑定和可绑定属性。
附录包含一个application.properties示例,其中包含Spring Boot支持的最常见属性的列表。 最终列表来自于搜索@ConfigurationProperties和@Value注释的源代码以及偶尔使用Binder。 有关加载属性的确切顺序的更多信息,请参见“第4.2章,外部化配置”。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论