我正在使用 Mongock 来初始化一个带有一些配置的 MongoDb 数据库,通过调用 system. {systemId: 'a', authorizedUsers: ['user1', user2]}
.
我的问题来自这样一个事实,即在 dev 中 user1 和 user2 被授权但在 prod 中只有 user1 被授权。
{env: 'dev', systemId: 'a', authorizedUsers: ['user1', user2]}
当我们搜索授权用户时,添加一个 env 属性并将其用作过滤器会更好吗?缺点是数据库中有不同的配置可用,我们需要选择正确的配置。- 还是在 Mongock 初始化函数(ChangeSet)中读取运行 Mongock 的环境并初始化正确的数据是否更好?缺点是我们无法在正确的环境中测试 init 的正确性
- 更好的解决方案?
预先感谢您的回复
编辑以澄清这两个选项
- 选项1
@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)
}
}
- 选项 2:(由@Mongock 团队提出)(已选择)
@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']}
}
}