【问题标题】:Read multiple properties file in one go using Spring Boot?使用 Spring Boot 一口气读取多个属性文件?
【发布时间】:2020-05-25 12:30:44
【问题描述】:

我多次浏览链接:How to pass a Map<String, String> with application.properties 和其他相关链接,但仍然无法正常工作。

我正在使用 Spring Boot 和 Spring REST 示例。链接问题:How to by default execute the latest version of endpoint in Spring Boot REST?

我已经创建了类似这样的映射并简单地阅读映射

get.customers={GET: '/app-data/customers', VERSION: 'v1'}
post.customers={POST: '/app-data/customers', VERSION: 'v1'}
get.customers.custId={GET: '/app-data/customers/{custId}', VERSION: 'v2'}

代码:

private String resolveLastVersion() {
   // read from configuration or something
    return "2";
}

代码:

@Component
@ConfigurationProperties
@PropertySource("classpath:restendpoint.properties")
public class PriorityProcessor {

    private final Map<String, String> priorityMap = new HashMap<>();

    public Map<String, String> getPriority() {
        return priorityMap;
    }
}

代码:

【问题讨论】:

    标签: spring spring-boot spring-rest api-versioning


    【解决方案1】:

    我建议如下实现:

    @ConfigurationProperties(prefix="request")
    public class ConfigurationProps {
        private List<Mapping> mapping;
    
        public List<Mapping> getMapping() {
            return mapping;
        }
    
        public void setMapping(List<Mapping> mapping) {
            this.mapping = mapping;
        }
    }
    

    Class Mapping 将表示有关单个映射的信息:

    public class Mapping {
        private String method;
        private String url;
        private String version;
    
        public Mapping(String method, String url, String version) {
            this.method = method;
            this.url = url;
            this.version = version;
        }
    
        public Mapping() {
        }
    
        // getters setters here
    }
    

    在 Configuration 或 spring boot 应用程序类上(带有 main 方法的类): @EnableConfigurationProperties(ConfigurationProps.class)

    在属性文件中放:

    request.mapping[0].method=get
    request.mapping[0].url=/customers
    request.mapping[0].version=1
    
    request.mapping[1].method=post
    request.mapping[1].url=/students
    request.mapping[1].version=2
    

    在过滤器中(我假设您按照链接问题的建议):

        @Component
        @Order(1)
        public class LatestVersionFilter implements Filter {
    
           private List<Mapping> mappings;
    
           public LatestVersionFilter(ConfigurationProps props) {
              this.mappings = props.getMapping();
           }
        }
    

    【讨论】:

    • 顺便说一句,从你想要实现的目标来看 - 考虑使用 Spring Cloud Gateway 项目、Zuul 2 甚至 Nginx 之类的东西。如果您将拥有多个具有共同入口点(网关)的微服务 - 也许您可以在那里做所有事情......
    • 我同意,感谢您提供的出色解决方案。如果不使用微服务架构,这是实现它的最佳方式。但是我坚持在这里发布的小问题:stackoverflow.com/questions/60146766/…
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2019-03-11
    • 2018-10-16
    • 2020-02-14
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多