我有一个CSV文件,其中包含“禁止的用户名”列表 - 大约有10,000个名字。基本上我想在用户注册时检查此列表。我想在我的数据库中加载这个列表,但我不想为每个名称创建一个域对象,而是BootStrap它们。但是,就管理我的数据而言,我也希望保持在Grails框架内。例如,如果我将dbCreate设置为create-drop,我不想丢失我的用户名列表 - 也就是说,我不想只是手动创建一个单独的表。我该怎么做呢? Grails是否提供开箱即用的处理这种情况的东西?任何建议都会很棒
答案 0 :(得分:1)
那么,为那些被禁用的用户名创建域类并将它们存储在数据库中,究竟是什么问题?我能看到的唯一问题是,每次在开发中启动应用程序时都需要将它们作为种子数据加载(在生产中你不会使用create-drop,是吗?;-))。我没有测试过这个,但我的猜测是,有10,000个非常简单的对象,这不应该是一个讨厌的性能阻止器。在生产中,你很可能会使用“更新”作为休眠策略,所以你只需要加载您的数据一次进入生产数据库。因此,我首选的方法是创建一个域类并在应用启动时加载数据(仅限开发中)。
如果您禁止的用户名数据是只读的(即列表未在运行时扩展),您还可以考虑将其加载到内存中(对于常量时间HashSet
,可能是contains()
) 。 10,000个字符串在内存消耗方面不应该是一个问题,并且在每个应用程序启动时加载它们的需求也不是问题,因为通常你不会经常重启你的生产环境。
答案 1 :(得分:1)
是的,您可以将文件加载到数据库中,并仍在grails应用中使用它。 此时,您可以使用Groovy Sql来执行自定义查询。我认为将查询保存在DAO样式类中是一种很好的做法,但这取决于您。 如果你走这条路,你仍然可以使用@Component和@Resource注释将DAO类依赖注入到你的服务中
答案 2 :(得分:0)
我认为你希望这些数据存在于数据库中。这样你可以查询注册用户的“黑名单”名称。