我正在使用Mongock在一个MongoDb数据库中添加一些信任,这是一组通过调用系统获得授权的用户。{systemId: 'a', authorizedUsers: ['user1', user2]}。
我的问题来自这样一个事实:在dev中,user1和user2是授权的,但是在prod中只有user1是授权的。
{env: 'dev', systemId: 'a', authorizedUsers: ['user1', user2]}并使用它作为筛选器更好吗?缺点是在DB中有不同的信任,我们需要选择正确的。中测试init之前的正确性。
谢谢你的答复
编辑以澄清这两个选项
@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']}
}
}使用
@Service
class AuthorizedUsers {
@Value("env")
private String env;
List<User> getAuthorizedUsers() {
return db.users.filter(env)
}
}@Mongock team)(choosed)提出的
@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']}
}
}发布于 2021-07-05 09:15:53
如果我没有错的话,我认为这个问题有两部分。
我想我们都同意第二步是明确的: Mongock以某种方式接受配置并执行迁移。
关于如何将配置提供给Mongock,在您的第一个选项中,您提到要为环境添加一个字段,对吗?您的意思是生产环境和开发环境具有相同的数据库?在我看来,除非你有一个很好的理由,否则我不会建议你这么做。在我的理想世界中,每个环境都有一个数据库,因此不需要环境字段。Mongock只需要从之前添加的集合中获取信息。
接下来的问题是如何将有关用户的配置数据添加到数据库中。如果可以从java代码中硬编码,那么可以很容易地在Mongock中完成。如果您正在使用Spring,您可以使用@Profile对talle使用哪个changeLog在哪个环境中执行。
如果不是,另一个想法是将这些用户作为环境变量或配置传递。如果您正在使用kubernetes,这类工具的ansible,通过环境变量提供它是一个不错的主意。但我想我没有足够的信息来做出更多的选择。
@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']}
}
}然后,您可以根据用户执行迁移。
@ChangeLog
public class ProperMigration {
@ChangeSet(...)
public void changeSetMethod() {
//migration code
}
}https://stackoverflow.com/questions/68228005
复制相似问题