Java 本地或远程存储库,具体取决于配置

Java 本地或远程存储库,具体取决于配置,java,spring,Java,Spring,我正在创建的api将提供有关电影的信息。我想从两个来源获取有关电影的信息: DB,其中将填充一些示例数据 远程API 我将在属性文件中设置标志,用于exmample fetch_from_remote=true/false 我的问题是如何组织我的项目。我想到了下面的代码。我将在MovieRepo(LocalRepo或RemoteRepo)的两个实现中的一个注入MovieService,具体取决于flag。但我不是舒尔,它是否有效,是否良好?你有什么建议/更好的主意吗 MovieControlle

我正在创建的api将提供有关电影的信息。我想从两个来源获取有关电影的信息:

  • DB,其中将填充一些示例数据
  • 远程API
  • 我将在属性文件中设置标志,用于exmample fetch_from_remote=true/false

    我的问题是如何组织我的项目。我想到了下面的代码。我将在MovieRepo(LocalRepo或RemoteRepo)的两个实现中的一个注入MovieService,具体取决于flag。但我不是舒尔,它是否有效,是否良好?你有什么建议/更好的主意吗

    MovieController.class

    public class MovieController{
        MovieService MovieService;
    
         Movie getMovie(int id){
             MovieService.getMovie(id);
         }
    }
    
    电影定位类

    public interface MovieRepository{
    
        Movie getMovie(int id);
    }
    
    RemoteRepo.class

    public class RemoteRepo implements MovieRepoisotry (
    
            public getMovie(int id){
                // implemenatation to connect to remotApi and fetchData
            }
    )
    
    public interface LocalRepo extends  MovieRepository,JpaRepository<ChatMessage, Integer>{
    
    }
    
    LocalRepo.class

    public class RemoteRepo implements MovieRepoisotry (
    
            public getMovie(int id){
                // implemenatation to connect to remotApi and fetchData
            }
    )
    
    public interface LocalRepo extends  MovieRepository,JpaRepository<ChatMessage, Integer>{
    
    }
    

    我不是舒尔,它是否能工作:那你为什么不测试它呢?看看
    @conditionalnproperty
    ,让spring基于属性为你创建bean。@JBNizet测试它需要一些时间,我想避免浪费时间,即使它能工作,也许有更好的方法problem@michalk谢谢我建议不要在属性文件中设置标志“fetch_from_remote”,而是设置它并从某个数据库表中读取它。这样您就不必进入代码或属性文件进行更改。若数据库表中为null,则可以运行一些默认函数/方法。希望这能有所帮助。我不是舒尔,它是否能工作:那你为什么不测试它呢?看看
    @conditionalnproperty
    ,让spring基于属性为你创建bean。@JBNizet测试它需要一些时间,我想避免浪费时间,即使它能工作,也许有更好的方法problem@michalk谢谢我建议不要在属性文件中设置标志“fetch_from_remote”,而是设置它并从某个数据库表中读取它。这样您就不必进入代码或属性文件进行更改。若数据库表中为null,则可以运行一些默认函数/方法。希望有帮助。