首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mongock按环境(dev、pprod、prod)插入数据库的最佳方法

使用Mongock按环境(dev、pprod、prod)插入数据库的最佳方法
EN

Stack Overflow用户
提问于 2021-07-02 15:41:55
回答 1查看 396关注 0票数 0

我正在使用Mongock在一个MongoDb数据库中添加一些信任,这是一组通过调用系统获得授权的用户。{systemId: 'a', authorizedUsers: ['user1', user2]}

我的问题来自这样一个事实:在dev中,user1和user2是授权的,但是在prod中只有user1是授权的。

  • :当我们搜索授权用户时,添加env属性{env: 'dev', systemId: 'a', authorizedUsers: ['user1', user2]}并使用它作为筛选器更好吗?缺点是在DB中有不同的信任,我们需要选择正确的。
  • 还是在Mongock init函数( ChangeSet)中读取Mongock运行的env更好,并输入正确的数据?缺点是我们无法在正确的environnement
  • A更好的解决方案??

中测试init之前的正确性。

谢谢你的答复

编辑以澄清这两个选项

  • 选项1

代码语言:javascript
复制
    @ChangeLog
    public class UsersChangeLogs {
    
     @ChangeSet(...)
     public void addUsers() {
     //add dev users {env: 'dev', systemId: 'a', authorizedUsers: ['user1', 'user2']}
     //add prod users {env: 'prod', systemId: 'a', authorizedUsers: ['user1', 'user2']}
     }
    
    }

使用

代码语言:javascript
复制
    @Service
    class AuthorizedUsers {
     @Value("env")
     private String env;
     List<User> getAuthorizedUsers() {
      return db.users.filter(env)
    }
    }

@Mongock team)(choosed)提出的

  • 备选案文2:

代码语言:javascript
复制
    @ChangeLog
    public class UsersChangeLogs {
    
     @Profile("dev")
     @ChangeSet(...)
     public void addUsers() {
     //add dev users {systemId: 'a', authorizedUsers: ['user1', 'user2']}
     }
    
     @Profile("prod")
     @ChangeSet(...)
     public void addUsers() {
     //add prod users {systemId: 'a', authorizedUsers: ['user1', 'user2']}
     }
    
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-05 09:15:53

如果我没有错的话,我认为这个问题有两部分。

  1. 在哪里存储用户的配置/如何根据该配置将其传递给Mongock
  2. ,初始化MongoDB数据库.

我想我们都同意第二步是明确的: Mongock以某种方式接受配置并执行迁移。

关于如何将配置提供给Mongock,在您的第一个选项中,您提到要为环境添加一个字段,对吗?您的意思是生产环境和开发环境具有相同的数据库?在我看来,除非你有一个很好的理由,否则我不会建议你这么做。在我的理想世界中,每个环境都有一个数据库,因此不需要环境字段。Mongock只需要从之前添加的集合中获取信息。

接下来的问题是如何将有关用户的配置数据添加到数据库中。如果可以从java代码中硬编码,那么可以很容易地在Mongock中完成。如果您正在使用Spring,您可以使用@Profile对talle使用哪个changeLog在哪个环境中执行。

如果不是,另一个想法是将这些用户作为环境变量或配置传递。如果您正在使用kubernetes,这类工具的ansible,通过环境变量提供它是一个不错的主意。但我想我没有足够的信息来做出更多的选择。

代码语言:javascript
复制
@Profile("dev")
@ChangeLog
public class DevUsersChangeLogs {

 @ChangeSet(...)
 public void addUsers() {
 //add users {systemId: 'a', authorizedUsers: ['user1', 'user2']}
 }

}

@Profile("prod")
@ChangeLog
public class ProdUsersChangeLogs {

 @ChangeSet(...)
 public void addUsers() {
 //add users {systemId: 'a', authorizedUsers: ['user1']}
 }

}

然后,您可以根据用户执行迁移。

代码语言:javascript
复制
@ChangeLog
public class ProperMigration {

 @ChangeSet(...)
 public void changeSetMethod() {
 //migration code
 }


}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68228005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档