1

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

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

  1. DiscoverClientConfiguration.java :创建此类是为了通过 https 连接到发现服务器,为了实现它,我遵循了本教程,代码如下:

    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", "**");
    
  2. RestTemplateConfiguration.java :这个类是为了使用 https 调用外部休息服务而创建的,为了实现它,我已经按照本教程进行操作。这里的情况更糟,因为我必须将 .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,但用于文件路径。问题在于,在这种特定情况下,软件将无法正确运行,因为它需要指定文件的整个文件系统路径。

4

1 回答 1

0

选项 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.xml 中检索这些属性。

于 2020-11-09T20:40:46.537 回答