发布网友 发布时间:2022-04-23 06:11
共2个回答
热心网友 时间:2022-04-10 02:34
SpringBoot中的配置文件主要有三种格式,properties、yaml、和xml方式。热心网友 时间:2022-04-10 03:52
1. 在构建时自动扩展属性
您可以使用现有的构建配置自动扩展它们,而不是硬编码在项目的构建配置中也指定的某些属性。这在 Maven 和 Gradle 中都是可能的。
1.1. 使用 Maven 自动扩展属性
您可以使用资源过滤从 Maven 项目中自动扩展属性。如果使用spring-boot-starter-parent,则可以使用@..@占位符引用 Maven 的“项目属性” ,如以下示例所示:
app.encoding=@project.build.sourceEncoding@
app.java.version=@java.version@
如果您不使用 starter parent,则需要在<build/>您的元素中包含以下元素pom.xml:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
您还需要在里面包含以下元素<plugins/>:
<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>
useDefaultDelimiters如果您${placeholder}在配置中使用标准 Spring 占位符(例如),则 该属性很重要。如果该属性未设置为false,则构建可能会扩展这些属性。
1.2. 使用 Gradle 自动扩展属性
您可以通过配置 Java 插件的processResources任务来自动从 Gradle 项目扩展属性,如以下示例所示:
processResources {
expand(project.properties)
}
然后,您可以使用占位符来引用您的 Gradle 项目的属性,如以下示例所示:
app.name=${name}
app.description=${description}
2. 外化 SpringApplication 的配置
ASpringApplication具有 bean 属性设置器,因此您可以在创建应用程序时使用其 Java API 来修改其行为。或者,您可以通过在spring.main.*. 例如,在 中application.properties,您可能有以下设置:
spring.main.web-application-type=none
spring.main.banner-mode=off
那么 Spring Boot 横幅不会在启动时打印,应用程序也不会启动嵌入式 Web 服务器。
外部配置中定义的属性会覆盖和替换 Java 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。