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.enabled:false 禁用 Spring Cloud Config