我有多个通过REST调用相互通信的微服务。 我使用了spring boot和spring rest,并在application.properties文件中配置了其余端点的URL。 现在的问题是,如果某个端点的URL发生了更改,那么我必须手动修改正在调用已更改的特定端点的服务的所有属性文件。
是否有解决方法,以便可以将URL放置在集中位置,以便任何修改都不会影响正在使用它的其他服务。
答案 0 :(得分:1)
如果使用微服务,则可以使用 Spring Cloud Config (Spring Cloud Config,Spring Cloud Config Server)。这非常有用,您可以在运行时更新配置。
Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。使用Config Server,您可以集中管理所有环境中应用程序的外部属性。客户端和服务器上的概念与Spring Environment和PropertySource抽象完全相同,因此它们非常适合Spring应用程序,但可以与以任何语言运行的任何应用程序一起使用。当应用程序从开发人员到测试人员进入生产过程进入生产过程时,您可以管理这些环境之间的配置,并确保应用程序具有在迁移时需要运行的所有内容。
答案 1 :(得分:1)
就像其他人提到的那样,您可以使用Spring Cloud Config Server
来远程加载您的应用程序配置。您只需要git
包含您的配置的存储库。
Spring云配置支持Git,数据库是您的配置存储。
想法是创建一个可以为其他应用程序提供配置的spring-boot应用程序。
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
您可以使用键spring.cloud.config.server
server.port: 8888
spring.cloud.config.server.git.uri: file://${user.home}/config-repo
在客户端,如果您在类路径中具有spring-config,则应用程序将尝试在端口8888上连接到运行的应用程序以检索配置。
更多信息here。
答案 2 :(得分:1)
您可以使用spring-cloud实现此目的。在spring-cloud中使用的常用方法是在git repo中配置所需的属性。然后,您所需的任何微服务都可以使用最少的配置来访问这些属性。您可以参考projects in this repo
limits-services
充当客户端,需要某些在spring-cloud-config-server
中配置的属性。希望这会有所帮助。
答案 3 :(得分:0)
可以将配置放入数据库中。
在那之后需要一个由其他服务使用的集中式缓存服务,可以是.jar服务,
然后可以将值加载到此服务的缓存类中,
那么在修改数据库中的URL值之后,前端需要有更新按钮来更新缓存,因此所有受影响的服务都可以使用新值。
而且更容易的是,可以使用独立的UI来更新那些配置,而不是直接更新数据库。
答案 4 :(得分:0)
您可以使用Microconfig.IO来管理服务配置,它的占位符功能可以引用其他服务中某些服务的配置值。因此,在您的情况下,您可以在服务器中配置部署URL,并在客户端中放置占位符。这样一来,您只能在一个位置编辑值,然后依赖它的每个人都会自动获取它。