【发布时间】:2021-09-14 13:47:13
【问题描述】:
我正在使用 Mongock 来初始化一个带有一些配置的 MongoDb 数据库,通过调用系统授权用户数组。 {systemId: 'a', authorizedUsers: ['user1', user2]}.
我的问题来自这样一个事实,即在 dev 中 user1 和 user2 被授权,但在 prod 中只有 user1 被授权。
- 添加一个env属性
{env: 'dev', systemId: 'a', authorizedUsers: ['user1', user2]}并在我们搜索授权用户时将其用作过滤器会更好吗?缺点是 DB 中有不同的配置可用,我们需要选择正确的配置。 - 或者在 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']}
}
}
【问题讨论】:
标签: database mongodb environment-variables initialization mongock