我们正在使用Spring Boot开发你的应用程序,并且目前正在通过我们的REST API在每次运行时创建我们的测试数据。现在我们要创建一个“Bootstrap”-Script,它应该在启动时运行并创建开发/测试期间所需的所有对象等等。
我来自Grails,你只需要一个可以执行此操作的Bootstrap类。
现在我修改了我们的Application.java类,从另一个类运行一个Method,它应该创建我们的对象,但我不能在那里注入我们的服务。
处理这种情况的最佳解决方案是什么?
问候 亚历山大
答案 0 :(得分:0)
在我们的应用程序类中,我们现在有以下代码:
public static void main(String[] args) {
System.out.println("spring.profiles.active="+System.getProperty("spring.profiles.active"));
ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
System.out.println("Application Running!!!");
autogenerateDatabaseTestdata(ctx);
}
private static void autogenerateDatabaseTestdata(ConfigurableApplicationContext ctx) {
ctx.getBean(DataGenerator.class).run(ctx);
}
DataGenerator如下所示:
@Component
public class DataGenerator {
@Value("${spring.jpa.hibernate.ddl-auto}")
private String schemaDllHandling;
@Value("${db.autogenerate_data}")
private Boolean isAutogenerateData;
public void run(ConfigurableApplicationContext ctx) {
if (isAutogenerateData == null || !isAutogenerateData || !"create".equalsIgnoreCase(schemaDllHandling)) {
return; // Do nothing
}
System.out.println("Running Bootstrap:");
ctx.getBean(CountryBootstrap.class).run();
System.out.println("Bootstrap finished!");
}
}
例如countryBootstrap看起来像这样:
@Component
public class CountryBootstrap {
@Autowired
CountryService countryService;
public CountryBootstrap() {
}
@Autowired
public CountryBootstrap(CountryService countryService) {
this.countryService = countryService;
}
public void run() {
countryService.saveCountry(new Country("Deutschland", "DE"));
}
}
在我们的Application.yml中,我们有一个值,指示是否应导入自动生成的数据:
db:
autogenerate_data: true
这是我们在Applicaation启动时插入TestData的解决方案