执行仅在开发人员配置文件中运行的ApplciationRunner

时间:2018-12-27 10:45:37

标签: java spring spring-boot spring-profiles

当应用程序仅在开发配置文件中启动时,如何创建虚拟数据?

我正在关注this article,以在Spring Boot中使用配置文件。我需要在应用程序启动时创建虚拟数据,但只能在开发配置文件中。我该如何实现?

我的课程实现了ApplicationRunner并重写了run方法来创建数据。我已尝试使用本文中的@Profile("dev")批注,但是无论活动配置文件如何,都将创建数据。

@SpringBootApplication
public class DemoApplication implements ApplicationRunner {

    @Autowired
    private UserService userService; //handles user saving

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Profile("dev")
    @Override
    public void run(ApplicationArguments arg0) throws Exception {
        User user = new User();
        user.setName("Dummy User");
        userService.save(user);
    }

}

application.properties中,我有

spring.profiles.active=test

仅当活动配置文件为dev时才创建虚拟用户,但同时也在test配置文件中创建虚拟用户。

2 个答案:

答案 0 :(得分:2)

@Profile应标记为@Bean@Component或它的构造型(即@Serivce@Controller@Repository等)

只需将其更改为:

@SpringBootApplication
public class DemoApplication {

    @Autowired
    private UserService userService; //handles user saving


    @Profile("dev")
    @Bean
    public ApplicationRunner devApplicationRunner(){
        return arg->{
           User user = new User();
           user.setName("Dummy User");
           userService.save(user);
        };
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

仅当启用DEV配置文件(例如通过application.properties)时,DEV ApplicationRunner的代码才会运行:

spring.profiles.active=dev

答案 1 :(得分:1)

尝试

@Configuration
public class MyWebApplicationInitializer implements WebApplicationInitializer {

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
    servletContext.setInitParameter("spring.profiles.active", "dev");
  }

}

@Autowired
private ConfigurableEnvironment env;
...
env.setActiveProfiles("dev");

@Profile仅适用于班级