Java Spring cloud配置-共享文件或其位置

Java Spring cloud配置-共享文件或其位置,java,spring-cloud,spring-cloud-stream,spring-cloud-config,Java,Spring Cloud,Spring Cloud Stream,Spring Cloud Config,我有两份申请: 一个sprig引导配置服务器 另一个是spring引导配置客户端 客户端必须使用名为certificate.json的文件 我想把这个文件存储在服务器端,这样另一个微程序和需要它的客户端程序就可以从服务器端检索它 我试试看: 将文件certificate.json复制到classpath:/config 将此行添加到application.properties: certificate.location:classpath:config/certificate.json 通

我有两份申请:

  • 一个sprig引导配置服务器
  • 另一个是spring引导配置客户端
客户端必须使用名为certificate.json的文件

我想把这个文件存储在服务器端,这样另一个微程序和需要它的客户端程序就可以从服务器端检索它

我试试看:

  • 将文件certificate.json复制到classpath:/config
  • 将此行添加到application.properties:

    certificate.location:classpath:config/certificate.json

  • 通过以下方式调用客户端程序中的值:

    @值(“${certificate.location}”) 私有字符串证书定位

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

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

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


提前谢谢。

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

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

我愿意

这样,您的位置已经是一个可以加载、调用的位置。等等。由于您的值的前缀是
classpath:
,因此您将拥有一个ClassPathResource实例,可以用于很多事情。

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

这样,您的位置已经是一个可以加载、调用的位置。等等。由于您的值的前缀是
classpath:
,因此您将拥有一个ClassPathResource实例,可以用于很多事情。

OP您需要创建一个web服务并返回certificate.json作为响应。然后,您可以通过向URI发送GET或POST请求来发送和接收数据,如。请参阅:


作为补充说明,您永远不应该将内部文件暴露在internet上,因为这是非常不安全的,会让您面临盗版和黑客攻击。

OP您需要创建一个web服务并返回certificate.json作为响应。然后,您可以通过向URI发送GET或POST请求来发送和接收数据,如。请参阅:


顺便说一句,你不应该将你的内部文件暴露在互联网上,因为这是非常不安全的,会让你面临盗版和黑客攻击。

在这种情况下,我会做的是

  • 添加静态文件夹的配置

    @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);
        }
    }
    
  • 将certificate.json放在fileFolder中并重试,它将直接从文件系统为您提供服务


  • 现在,只有使用/files/path调用此文件夹中添加的每个文件时,才会提供服务。在这种情况下,我会做的是

  • 添加静态文件夹的配置

    @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);
        }
    }
    
  • 将certificate.json放在fileFolder中并重试,它将直接从文件系统为您提供服务


  • 现在,只有使用/files/path调用此文件夹中添加的每个文件时,才会提供服务。是的,但我不知道服务器项目的绝对路径!而且,客户端和服务器应用程序可能位于不同的计算机上,因此客户端看不到file://Have 您尝试了Spring Integration SFTP流式入站通道适配器吗?OP想知道他从类路径中指定的文件的绝对位置,而你建议“spring integration SFTP streaming inbound channel adapter”?是的,但我不知道服务器项目的绝对路径!而且,客户端和服务器应用程序可能位于不同的计算机上,因此客户端看不到file://Have 您尝试了Spring Integration SFTP流式入站通道适配器吗?OP想知道他从类路径中指定的文件的绝对位置,而您建议使用“spring integration SFTP streaming inbound channel adapter”?您是否想过公开REST端点以将该文件作为资源返回,以便另一方可以使用
    新的UrlResource(“http://my.server/certificate.json")
    ?好主意@Artem Bilan!我试试看!您是否考虑过公开REST端点以将该文件作为资源返回,以便另一方可以使用
    newUrlResource(“http://my.server/certificate.json“
    ?好主意@Artem Bilan!我试试看!试试这个也试试这个