SpringBoot的配置文件有哪几种格式?
SpringBoot属性和配置1. 在构建时自动扩展属性
springboot文档_springboot文档中文版
springboot文档_springboot文档中文版
springboot文档_springboot文档中文版
您可以使用现有的构建配置自动扩展它们,而不是硬编码在项目的构建配置中也指定的某些属性。这在 Men 和 Gradle 中都是可能的。
1.1. 使用 Men 自动扩展属性
您可以使用资源过滤从 Men 项目中自动扩展属性。如果使用spring-boot-starter-parent,则可以使用@..@占位符引用 Men 的“项目属性” ,如以下示例所示:
app.encoding=@project.build.sourceEncoding@
app.ja.version=@ja.version@
如果您不使用 starter parent,则需要在
您还需要在里面包含以下元素
:
useDefaultDelimiters如果您${placeholder}在配置中使用标准 Spring 占位符(例如),则 该属性很重要。如果该属性未设置为false,则构建可能会扩展这些属性。
1.2. 使用 Gradle 自动扩展属性
您可以通过配置 Ja 插件的processResources任务来自动从 Gradle 项目扩展属性,如以下示例所示:
processResources {
expand(project.properties)
}然后,您可以使用占位符来引用您的 Gradle 项目的属性,如以下示例所示:
app.name=${name}
app.description=${description}
2. 外化 SpringApplication 的配置
ASpringApplication具有 bean 属性设置器,因此您可以在创建应用程序时使用其 Ja API 来修改其行为。或者,您可以通过在spring.main.. 例如,在 中application.properties,您可能有以下设置:
spring.main.web-application-type=none
spring.main.banner-mode=off
那么 Spring Boot 横幅不会在启动时打印,应用程序也不会启动嵌入式 Web 。
外部配置中定义的属性会覆盖和替换 Ja API 指定的值,主要来源的显着例外。主要来源是提供给SpringApplication构造函数的那些:
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MyApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}}
或sources(…)a 的方法SpringApplicationBuilder:
import org.springframework.boot.Banner;
import org.springframework.boot.builder.SpringApplicationBuilder;
public class MyApplication {
public static void main(String[] args) {
new SpringApplicationBuilder()
.bannerMode(Banner.Mode.OFF)
.sources(MyApplication.class)
.run(args);
}}
鉴于上面的例子,如果我们有以下配置:
spring.main.sources=com.example.MyDatabaseConfig,com.example.MyJmsConfig
spring.main.banner-mode=console
实际应用程序将显示横幅(由配置覆盖)并使用三个来源作为ApplicationContext. 应用程序来源是:
MyApplication (来自代码)
MyDatabaseConfig (来自外部配置)
MyJmsConfig(来自外部配置)
3. 更改应用程序外部属性的位置
默认情况下,来自不同源的属性被添加到弹簧Environment以定义的顺序(参照“的features.html中的”“弹簧功能”部分的确切顺序)。
您还可以提供以下系统属性(或环境变量)来更改行为:
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。
Spring boot
如有不懂:请参阅Spring教育管理中心了解更多详情。
springboot快速入门及@SpringBootApplication注解分析
简单demo
使用 men 构建项目,现在稳定版本是1.5.4,个入门demo不是web项目,pom依赖如下:
实体 User 类:
配置类:
入口类 Application :
项目结构目录
启动程序,以 main 方法启动:
打印出正确的结果。
来分析一下流程,为何 Runnable 类, User , Map 会纳入spring容器。
首先我们分析的就是入口类 Application 的启动注解 @SpringBootApplication ,进入源码:
发现 @SpringBootApplication 是一个复合注解,包括 @ComponentScan ,和 @SpringBootConfiguration , @EnableAutoConfiguration 。
根据上面的理解,上面的入口类 Application ,我们可以使用:
使用 @ComponentScan 注解代替 @SpringBootApplication 注解,也可以正常运行程序。原因是 @SpringBootApplication 中包含 @ComponentScan ,并且 springboot 会将入口类看作是一个 @SpringBootConfiguration 标记的配置类,所以定义在入口类 Application 中的 Runnable 也可以纳入到容器管理。
看一个demo学会使用这些参数配置
在包下com.zhihao.miao.springboot定义一个启动应用类(加上@SpringBootApplication注解)
在com.zhihao.miao.beans包下定义一个实体类,并且想将其纳入到spring容器中,
启动启动类,打印结果如下:
说明Cat类并没有纳入到spring容器中,这个结果也如我们所想,因为@SpringBootApplication只会扫描@SpringBootApplication注解标记类包下及其子包的类(特定注解标记,比如说@Controller,@Serv,@Component,@Configuration和@Bean注解等等)纳入到spring容器,很显然MyConfig不在@SpringBootApplication注解标记类相同包下及其子包的类,所以需要我们去配置一下扫包路径。
修改启动类,@SpringBootApplication(scanBasePackages = "com.zhihao.miao"),指定扫描路径:
启动并打印:
当然使用@SpringBootApplication(scanBasePackageClasses = MyConfig.class),指定scanBasePackageClasses参数的value值是你需要扫描的类也可以,结果一样,不过如果多个配置类不在当前包及其子包下,则需要指定多个。
再看一个列子,
在上面的列子的相同包下(com.zhihao.miao.springboot)配置了People,并将其纳入到spring容器中(@Component),我们知道@SpringBootApplication注解会扫描当前包及其子包,所以People类会纳入到spring容器中去,我们需要将其排除在spring容器中,如何作?
可以使用@SpringBootApplication的另外二个参数(exclude或excludeName)
启动类,
启动并打印结果:
然后修改@SpringBootApplication配置,
很明显启动报错。使用@excludeName注解也可以。如下,
@SpringBootApplication(excludeName = {"com.zhihao.miao.springboot.People"})
参考文档:
Springboot1.5.4文档
Springboot整合springfox3+knife4j,生成接口文档
在这篇博客中,会记录 springfox3 的基本配置与使用;由于swagger-ui看得不是很习惯,额外引入了 knife4j ,使用增强版本的swagger的前端ui。
注意
@ConditionalOnProperty 注解声明了当 springfox.documentation.enabled 为 true 时启用配置,而且默认值就是 true (Swagger仅仅建议在开发阶段使用);
这里以 WebMvcConfig 为例。
@ApiImplicitParam
用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)--> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
swagger页面:项目地址 + /swagger-ui/index.html
knife4j页面:项目地址 + /doc.html
1. swagger3中,设置全局参数不生效
SpringBoot版本升级方案
本文给大家介绍如何安全的升级工程中的SpringBoot版本
参考SpringBoot文档:
以我的测试工程为例: ,大家可以克隆下来测试使用
1.编辑工程配置 pom.xml ,添加 spring-boot-properties-migrator 依赖项
2.修改 spring-boot-starter-parent 的版本号,设置为你想升级到的目标版本,例如我目前使用的版本号是 2.4.5 ,要升级到目标版本 2.5.6
4.,修复完升级后的各种问题,记得将 spring-boot-properties-migrator 依赖项从工程中删除,因为实际的工程中并不需要此依赖~
SpringBoot2基于Swagger2生成离线Api文档
Github :
Gitee :
个人觉得 旧版的配置简单许多 ,新版的配置按照demo的配置来做还是复杂了很多
配置到Springboot项目中以后,在项目打包的时候便会通过单元测试在指定的目录生成被 称为staticdocs的离线文档
该篇博文引用的依赖都要引入,Spring Rest Docs的依赖spring-restdocs-mockmvc,离线文档的依赖springfox-staticdocs,因为要在单元测试的时候生成文档,所以需要再加测试相关的spring-boot-starter-test。
asciidoctor-men-plugin 插件会把Asciidoc格式文件转成HTML5格式输出。
这个类包含两个方法,TestApi()是用来生成例子,test()用来生成Asciidoc的文档。生成例子用到了spring-restdocs-mockmvc,每一个API都要进行单元测试才能生成相应的文档片段(snippets),生成的结果如图:
生成完整的Asciidoc文档用到了 Swagger2MarkupConverter ,步先获取在线版本的文档并保存到文件 swagger.json 中,第二步把 swagger.json 和之前的例子snippets整合并保存为Asciidoc格式的完整文档。生成结果如图:
通过配置类定义一些文档相关的信息
路径:项目名/docs/asciidoc/index.adoc
利用前面配置的men插件,只需要执行打包就可以生成相应的文档,如图:
该篇博文引用的依赖都要引入,Spring Rest Docs的依赖spring-restdocs-mockmvc,离线文档的依赖springfox-staticdocs,因为要在单元测试的时候生成文档,所以需要再加测试相关的spring-boot-starter-test。
asciidoctor-men-plugin 插件会把Asciidoc格式文件转成HTML5格式输出。
这个类包含两个方法,TestApi()是用来生成例子,createSpringfoxSwaggerJson()用来生成Asciidoc的文档。生成例子用到了spring-restdocs-mockmvc,每一个API都要进行单元测试才能生成相应的文档片段(snippets),生成的结果如图:
生成完整的Asciidoc文档用到了 Swagger2MarkupConverter ,步先获取在线版本的文档并保存到文件 swagger.json 中,第二步把 swagger.json 和之前的例子snippets整合并保存为Asciidoc格式的完整文档。生成结果如图:
通过配置类定义一些文档相关的信息
在resources目录下创建一个名为logback.xml的配置文件,使用LogstashEncoder作为Default Log Encoder
路径:项目名src/docs/asciidoc/index.adoc
利用前面配置的men插件,只需要执行打包就可以生成相应的文档,如图: