Spring 云配置 - 共享文件或他的位置

Spring cloud config - Share file or his location

我有两个申请:

客户端必须使用名为 certificate.json.

的文件

我想将此文件存储在服务器端,以便需要它的另一个微程序和我的客户端程序可以从服务器端检索它。

我试试看:

但是certificateLocation的值为classpath:config/certificate.json。我想要的值是文件位置,如:/home/user/project/scr/main/resources/config/certificate.json.

或者,有没有办法通过 URI 直接检索我的文件,例如 locahost:8889/...(8889 是我的配置服务器端口)。

编辑 1: 我不能使用服务器的绝对路径,因为我不是 运行 它的人。

提前致谢。

classpath 只是 URL 的协议部分。您可以使用 file 或任何其他支持的协议。例如,file://home/user/project/scr/main/resources/config/certificate.json.

Try this url

spring.cloud.config.server.native.searchLocations
=file://${user.home}/CentralRepo/
SPRING_PROFILES_ACTIVE=native
I am also get this way using microservice

我愿意

@Value("${certificate.location}") private Resource certificateLocation;

这样,您的位置已经是 Resource that you can load, call getURI(), getFile().getAbsolutePath() 等。由于您的值以 classpath: 为前缀,您将拥有一个 ClassPathResource 实例,您可以将其用于很多事情。

OP 你需要创建一个网络服务和 return certificate.json 作为响应。然后,您可以通过向 https://12.12.12.12:8080/getCertificate 这样的 URI 发送 GET 或 POST 请求来发送和接收数据。请参阅:

https://spring.io/guides/gs/rest-service/

附带说明一下,你永远不应该将你的内部文件暴露在互联网上,因为它非常不安全,并且容易让你遭受盗版和黑客攻击。

在这种情况下我会做的是

  1. 为静态文件夹添加配置

    @SpringBootApplication public class DemoStaticresourceApplication extends WebMvcConfigurerAdapter {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoStaticresourceApplication.class, args);
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/files/**").addResourceLocations("file:/fileFolder/")
                    .setCachePeriod(0);
        }
    }
    
  2. 将 certificate.json 放在 fileFolder 中并尝试 http://localhost:8080/files/certificate.json 它将直接从文件系统为您服务。

现在,您添加到此文件夹中的每个文件只有在使用 /files/ 路径调用时才会被提供