我想知道在 spring mvc + hibernate 应用程序中添加固定装置以用于开发目的的最佳方法是什么。基本上,这个想法是当应用程序在“开发”环境中加载时,一组固定装置应该预先填充数据库。有几个考虑因素是我不想使用 DbUnit 或加载硬编码的 sql,而是想使用实体管理器在应用程序内部生成固定装置,以便在需要时使用某些服务来生成信息(让假设我想创建一些用户固定装置,id 喜欢能够使用 salt 服务等来生成密码等等)。理想情况下,我希望能够为每种域类型将不同类中的固定装置分开。到目前为止,我还没有找到任何有帮助的东西?我很感激任何帮助,请记住,我是一个完整的 Spring 新手,来自 PHP 背景,所以请详细说明应该去哪里:S。谢谢!
问问题
814 次
1 回答
1
这是为了开发吧?不只是用于单元或集成测试?如果是这样,我想我会创建一个带有 main 的 Java 类,然后将您的数据创建代码放在那里。您还可以使该类与数据填充 bean 自动连接。然后让所有数据填充器实现相同的接口。确保你的主要方法是这样注释的:
@ContextConfiguration( "classpath:/META-INF/spring/applicationContext.xml")
这实际上将为您的静态主要方法加载弹簧配置。
然后,您可以在每次擦除数据库后让构建运行它,或者在需要填充数据时手动调用它。
如果这只是用于单元测试,那么我会在您的测试源路径中创建一个数据填充器,然后从您的测试 #setUp 方法中调用它。
考虑以下:
public interface Populator {
void run();
}
@Repository
public class UserPopulator {
@PersistenceContext
private EntityManager em;
@Transactional
public void run() {
create some users
em.persist( users );
}
}
@Repository
public class ThingPopulator {
@PersistenceContext
private EntityManager em;
@Transactional
public void run() {
create some thing
em.persist( thing );
}
}
@Configurable
@ContextConfiguration( "classpath:/META-INF/spring/applicationContext.xml")
public class DataPopulator {
@Autowired
private List<Populator> populators;
public void run() {
for ( Populator populator : populators ) {
populator.run();
}
}
public static void main(String[] args) {
new DataPopulator().run();
}
}
然后你可以运行这个类进行开发。如果您有一个仅针对用户的单元测试,您还可以执行以下操作:
public class UserTest {
@Before
public void setUp() {
new UserPopulator().run();
}
// tests
}
或类似的东西。
于 2013-02-03T19:04:46.190 回答