#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!";
}
}