Spring Cloud Config Server 是硬编码路径的有效解决方案吗?

Posted

技术标签:

【中文标题】Spring Cloud Config Server 是硬编码路径的有效解决方案吗?【英文标题】:Is a Spring Cloud Config Server a valid solution for hardcoded paths? 【发布时间】:2021-02-21 13:55:19 【问题描述】:

晚上好! 我正在尝试学习如何使用 Spring Boot 实现微服务架构,但我在项目中遇到了一些硬编码路径的问题。

我的代码中有 2 个特定的类,我必须手动放置这些路径,它们是:

    DiscoverClientConfiguration.java :创建此类是为了通过 https 连接到发现服务器,为了实现它,我遵循了这个 tutorial,这里是代码:

    System.setProperty("javax.net.ssl.keyStore", "C:\\ ..my file system path.. \\THIS PROJECT FOLDER\\src\\main\\resources\\keystore\\gateway.jks");
    System.setProperty("javax.net.ssl.keyStorePassword", "**");
    
    System.setProperty("javax.net.ssl.trustStore", "C:\\ ..my file system path.. \\THIS PROJECT FOLDER\\src\\main\\resources\\keystore\\gateway.jks");
    System.setProperty("javax.net.ssl.trustStorePassword", "**");
    

    RestTemplateConfiguration.java :创建这个类是为了使用 https 调用外部休息服务,我遵循了这个tutorial,以实现它。这里的情况更糟,因为我必须将 .jks 文件的路径放在另一个项目中,这里是代码:

    private HttpComponentsClientHttpRequestFactory validateSSL()
    
    String location = "C:\\ ..my file system path.. \\ANOTHER PROJECT FOLDER\\src\\main\\resources\\keystore\\be_device.jks";
    String pass = "++"; ... some more code ...
    
    

您可以想象,每次有人拉代码时,他/她都必须更改那些不理想的路径。

在第一种情况下,我尝试创建一个 .properties 文件以使用 classpath: 表示法,但它不起作用,并且在运行时出现了一些异常。

在第二种情况下,我尝试使用这种符号

..\\..\\Centro\\Centro-Device\\src\\main\\resources\\keystore\\be_device.jks

为了不明确写入我的文件系统路径,但在我的电脑(Windows 10 专业版)中无法在运行时工作。另一方面,在另一位同事使用 Linux Mint 的机器上,他说这个符号 ../../Centro/Centro-Device/src/main/resources/keystore/be_device.jks 可以正常工作(我已经在我的机器上测试过,但在运行时不起作用)。

您认为使用 Spring Cloud 创建配置服务器可能是解决此问题的有价值的解决方案吗? 我正在考虑将我们所有的文件系统路径放在配置服务器中,并根据使用的机器获取它们。您如何看待这个想法?

编辑

对不起,如果我没有很好地解释我自己。我的问题不是基于在某些.properties 中的路径移动的事实,我希望有一个环境,我可以自动在多个路径选项之间进行选择,因为我已经尝试了带有@Value 等注释的解决方案。 几乎像 DiscoveryServer,但用于文件路径。 问题是在这种特定情况下,软件将无法正确运行,因为它需要指定文件的整个文件系统路径。

【问题讨论】:

【参考方案1】:

选项 1: 将这些属性放在您的application.properties 文件中,Spring Boot 框架将在为您启动时更新环境。 可以使用@Value注解初始化spring组件类中的字段。

类似这样的:

@Component
public class YourClass 

@Value("$your.property.key)"
private String path;


选项 2: 在您的项目中创建附加\外部config.properties 文件并将这些属性放入其中。 使用 @PropertySource 注释对属性使用者类进行注释,并为其提供 config.properties 文件的路径。

使用上面的 Value 注释或从 System 中检索这些属性。

【讨论】:

我已经尝试了这两个选项,如果我没有很好地解释我的自我,很抱歉。我的问题不是基于在某些 .properties 中的路径移动的事实,我希望有一个可以自动在多个路径选项之间进行选择的环境

以上是关于Spring Cloud Config Server 是硬编码路径的有效解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server的区别

spring-cloud-config:spring-cloud-config Maven配置错误

spring-cloud-config-server

无法通过 spring.cloud.config.enabled:false 禁用 Spring Cloud Config

0701-spring cloud config-简介Config Server开发Config Client开发

问题 spring-cloud-config 和 spring-cloud-bus