在多模块maven项目中外部化数据库属性的最佳策略是什么?

时间:2016-11-12 09:20:57

标签: database maven spring-boot flyway

我有一个基于多模块maven的项目,它有许多Spring Boot应用程序,其中一些(让我们称之为AB)连接到数据库(我有一个单独的模块与两个应用程序所依赖的数据库相关代码。)我也使用Flyway来维护数据库版本控制并维护数据库结构。

维护数据库属性的最佳方法是什么?目前我有3个地方,我正在重复同样的事情。我有application.yml模块Aapplication.yml模块B,因为它们都是单独的Spring Boot应用程序。然后我再次使用Flyway插件配置,需要pom.xml中的属性才能执行其任务,例如cleanrepairmigrate

集中和外部化此信息的正确方法是什么,例如数据库URL,用户名和密码?我也面临着这样的问题:每次我将新代码拉到测试系统上时,我都必须再次更新相同的数据,因为它被覆盖了,测试系统上的数据库配置与我的本地开发环境不同。

管理此问题的最佳策略是什么?

2 个答案:

答案 0 :(得分:0)

  1. 将配置外部化为配置模块。当然,这取决于Flyway / Spring Boot使用基于类路径的属性的灵活性。

  2. 查看archaius之类的内容,让您的配置真正外化,集中和动态,让它由外部数据存储区支持。这里涉及的工作量更多,但为您提供了额外的好处,例如能够在一个地方更改配置,并在各地运行的应用程序中动态选择它们。

  3. 这不是一个容易解决的问题,它肯定涉及一些工作,通过挂钩到他们的生命周期来使您的工具合作。

答案 1 :(得分:0)

对于您的flyway,您可以使用maven-properties-plugin。通过这种方式,您可以将凭证外部化为属性文件。一个例子被描述为here

对于spring-boot应用程序,我将推荐spring cloud config 。使用spring cloud配置,您可以将配置外部化到可以通过Eureka服务发现的git存储库,例如,比如here。我将考虑将模块重组为独立的微服务。基于微服务架构的良好基础架构提供了JHipster项目。