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

Execute ApplciationRunner run only in dev profile

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

我正在关注 this article 在 spring 引导中使用配置文件。我需要在应用程序启动时创建虚拟数据,但只在开发配置文件中。我如何实现这一目标?

我的 class 实现了 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 个人资料中创建。

尝试

@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仅适用于类

@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 ApplicationRunner 的代码将仅 运行 如果启用了 DEV 配置文件,例如通过 application.properties:

spring.profiles.active=dev