在服务器启动时创建测试数据并将其插入数据库的正确方法是什么(我使用JPA / JDBC支持的Postgres实例)。
最好以创建实体的形式,并通过Repository接口持久化而不是编写纯SQL代码。像RoR的Rake db:seed
助手那样。
如果框架在注入所有bean并且数据库准备就绪时公开了一个用于执行操作的挂钩,那么这也可以工作。
答案 0 :(得分:19)
您可以捕获ApplicationReadyEvent
然后插入演示数据,例如:
@Component
public class DemoData {
@Autowired
private final EntityRepository repo;
@EventListener
public void appReady(ApplicationReadyEvent event) {
repo.save(new Entity(...));
}
}
或者您可以实现CommandLineRunner
或ApplicationRunner
,以便在应用程序完全启动时加载演示数据:
@Component
public class DemoData implements CommandLineRunner {
@Autowired
private final EntityRepository repo;
@Override
public void run(String...args) throws Exception {
repo.save(new Entity(...));
}
}
@Component
public class DemoData implements ApplicationRunner {
@Autowired
private final EntityRepository repo;
@Override
public void run(ApplicationArguments args) throws Exception {
repo.save(new Entity(...));
}
}
甚至可以像你的应用程序(或其他'config')类中的Bean一样实现它们:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public CommandLineRunner demoData(EntityRepository repo) {
return args -> {
repo.save(new Entity(...));
}
}
}
答案 1 :(得分:4)
使用Hibernate初始化数据库 如果Hibernate从头开始创建架构(即ddl-auto属性设置为create或create-drop),则在启动时将在启动时执行类路径根目录中名为 import.sql 的文件。这对于演示和测试很有用,如果你小心,但可能不是你想要在生产中的类路径上。这是一个Hibernate功能(与Spring无关)。
答案 2 :(得分:1)
你可以这样做
LPCSTR printer = R"(\\gisrv44.wekal.de\wkkp04)";
PRINTER_DEFAULTSA pDefault;
pDefault.DesiredAccess = PRINTER_ACCESS_ADMINISTER;
// Open a handle to the printer.
bStatus = OpenPrinterA(szPrinterName, &hPrinter, &pDefault);