问题描述
晚上好! 我正在尝试学习如何使用Spring Boot实现微服务架构,并且在项目中遇到一些硬编码路径时遇到了麻烦。
我的代码中有2个特殊的类,我必须手动放置这些路径,它们是:
-
discoverClientConfiguration.java:制成此类是为了通过https连接到discovery Server,要实现它,我遵循了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
为了不显式地写入我的文件系统路径,但在我的PC(Windows 10 Professional)中在运行时不起作用。另一方面,在另一位使用Linux Mint的同事的机器上,他说../../Centro/Centro-Device/src/main/resources/keystore/be_device.jks
这个符号正确运行(我已经在我的系统上测试过,并且在运行时不起作用)。
您是否认为使用Spring Cloud创建Config Server可能是解决此问题的有价值的解决方案? 我当时正在考虑将所有文件系统路径放入Config Server中,并根据使用的计算机来获取它们。您如何看待这个想法?
编辑
对不起,如果我不能很好地说明自己。我的问题不是基于在某些.properties中的路径移动这一事实,我想拥有一个可以在多个路径选项之间自动进行选择的环境,因为我已经尝试了使用@Value之类的注释的解决方案。 几乎类似于discoveryServer,但用于文件路径。 问题在于,在这种特定情况下,该软件将无法正常运行,因为它需要指向指定文件的整个文件系统路径。
解决方法
选项1:
将这些属性放在您的selectOfferViaRouter = false;
offers: Offer[] = [];
selectedOfferId = -1;
trigger: any;
constructor(
private offerService: OfferService,private router: Router,private activatedRoute: ActivatedRoute) { }
ngOnInit(): void {
this.getAllOffers();
}
ngOnChanges(): void {
this.getAllOffers();
}
// get all offers on observable
getAllOffers(): void {
this.offerService.getAll().subscribe(data => {
this.offers = data;
});
}
// to update the table of offers
detectTrigger(event: Event): void {
this.getAllOffers();
console.log(this.offers);
}
selectOffer(id: number): void {
this.router.navigate([id],{relativeTo: this.activatedRoute});
}
addOffer(): void{
this.offerService.AddOffer();
}
文件中,Spring Boot框架将在为您启动时更新环境。
您可以使用application.properties
批注来初始化spring组件类中的字段。
类似这样的东西:
@Value
选项2:
在您的项目中创建其他\外部@Component
public class YourClass {
@Value("${your.property.key})"
private String path;
}
文件,并将这些属性放入其中。
用config.properties
批注对属性消费者类进行批注,并为其提供config.properties文件的路径。
使用上述的Value注释或从System检索这些属性。