如何将Spring Boot中的application.properties文件外部化为外部依赖JAR?

Ind*_*nde 4 java spring spring-boot

我有一个简单的Maven模块(不是Spring Boot应用程序),我放置了我的application.properties文件.

我有6-7个Spring Boot应用程序,我不想application.properties在每个应用程序目录中都有一个文件.我更喜欢它,如果它在一个地方(外部Maven模块).

我将maven模块添加为每个Spring Boot应用程序poms中的依赖项.

但是,当我运行这些应用程序时,它无法自动检测application.properties文件,因为它来自物理上不存在于每个应用程序目录中的依赖jar.

有没有办法让这成为可能?我想避免在6-7个不同的位置拥有属性文件,因为这很难管理和处理.

先感谢您!

Szy*_*iak 5

考虑使用Spring Cloud Config,它为分布式系统中的外部化配置提供服务器和客户端支持.它需要一些小的努力,但从长远来看它非常有用.配置服务器管理配置文件(.properties.yml),您仍然可以使用每个配置文件的不同配置(例如application-test.properties,application-prod.properties等).您的应用程序具有更高的优先级,因此如果需要,您始终可以覆盖来自配置服务器的属性.另一个很酷的功能是配置服务器可以使用Git存储库,因此您可以轻松地对所有配置文件进行版本控制.它还支持加密 - 任何脆弱的数据都可以加密,因此只有您的应用程序知道如何解密它.

配置服务器

配置服务器只不过是一个简单的Spring Boot应用程序,它可以实现为:

@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
  public static void main(String[] args) {
    SpringApplication.run(ConfigServer.class, args);
  }
}
Run Code Online (Sandbox Code Playgroud)

包含简单的application.properties文件:

server.port: 8888
spring.cloud.config.server.git.uri: file://${user.home}/config-repo
Run Code Online (Sandbox Code Playgroud)

pom.xml中的依赖关系

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

配置客户端

在客户端,您可以为pom.xml添加依赖项(如果使用Gradle,则在build.gradle中添加相应的依赖项):

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

和所有你需要做的就是添加一个URL来配置服务器,以您的application.properties(或application.yml如果你使用YAML insted的):

spring.cloud.config.uri: http://myconfigserver.com
Run Code Online (Sandbox Code Playgroud)

配置文件结构

现在假设您已经为配置文件设置了Git存储库.让我们假设你的应用程序被命名为喜欢horus,venus,mercury等你有3个不同的配置文件:dev,testprod.您还有一些适用于所有应用程序的配置.在这种情况下,您的配置文件结构将如下所示(我将在此处使用属性文件,但它也适用于YAML):

  • application.properties - 所有应用程序的通用配置,无论他们使用什么配置文件
  • application-dev.properties- 使用dev配置文件运行的所有应用的通用配置
  • application-test.properties- 使用test配置文件运行的所有应用的通用配置
  • application-prod.properties- 使用prod配置文件运行的所有应用的通用配置
  • horus.properties - horus app config for,适用于所有配置文件
  • horus-dev.properties- 仅适用于dev个人资料的horus app配置
  • horus-test.properties- 仅适用于test个人资料的horus app配置
  • horus-prod.properties- 仅适用于prod个人资料的horus app配置
  • 等等

还有一些其他选项可以设置(如加密,连接策略(快速失败或忽略)等),一切都在官方文档https://cloud.spring.io/spring-cloud-config/中有详细描述和记录.希望它可以帮助您在分布式应用程序环境中管理配置.配置服务器是为解决此问题而发明的解决方案.