Весенняя загрузка, запускающая tomcat на основе правильной настройки профиля

#spring #spring-boot

#spring #весенняя загрузка

Вопрос:

Я хотел бы иметь два профиля в моем приложении Standalone без запуска tomcat и без загрузки Controller настроек и REST как раз наоборот. Я хотел бы иметь возможность переключаться между этими параметрами на основе профиля (если это возможно).

Я пытался использовать два основных приложения:

 @SpringBootApplication(scanBasePackages = "io.dabow")
@EnableJpaRepositories("io.dabow.db.repository")
@EntityScan(basePackages = "io.dabow.db.entity")
@EnableJpaAuditing
@Profile("REST")
public class ScannerApplication {
   public static void main(String[] args) {

       SpringApplication.run(ScannerApplication.class, args);
    }
}
  

и второй

 @SpringBootApplication(scanBasePackages = "io.dabow")
@EnableJpaRepositories("io.dabow.db.repository")
@EntityScan(basePackages = "io.dabow.db.entity")
@EnableJpaAuditing
@Profile("Standalone")
public class ScannerApplicationStandalone {
    public static void main(String[] args) {

        new SpringApplicationBuilder(ScannerApplication.class).web(WebApplicationType.NONE).run(args);
    }
}
  

Когда я запускаю приложение с активным профилем REST , все работает отлично, но когда я использую REST profile ScannerApplication.main , все еще запускается, что, как я понимаю, является ожидаемым поведением.

Кто-нибудь может дать мне подсказку о том, как заставить его работать должным образом?

Комментарии:

1. вы могли бы запустить свое приложение с параметрами виртуальной машины: -Dspring.main.web-application-type=NONE

2. @DirkDeyneI думал об этом, но я хотел бы запустить какую-либо службу после запуска приложения в модели без rest api

3. вы должны быть в состоянии это сделать… В чем проблема?

4. полезно ли это демоприложение ?

5. Да, этот пример — именно то, что я искал! пожалуйста, напишите ответ, чтобы я мог его отметить!

Ответ №1:

На самом деле вам не нужен профиль для запуска вашего приложения с WebApplicationType.NONE .

Просто запустите свое приложение с параметрами виртуальной машины: -Dspring.main.web-application-type=NONE

Вы можете использовать @ConditionalOnNotWebApplication для компонентов, служб, … если вы хотите что-то сделать, когда ваше приложение запускается как none-web

Пример:

 import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class DemoApplication {

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

}

@Service
@ConditionalOnNotWebApplication
class DemoService {

    /* triggered if application is started with -Dspring.main.web-application-type=NONE */
    @EventListener(ApplicationReadyEvent.class)
    public void doStuffIfNoWeb(){
        System.out.println("Hi no web stuff");
    }

}

@RestController
class DemoController {

    @GetMapping
    public String hello(){
        return "Hello World!";
    }

}