웹 애플리케이션과 명령줄 애플리케이션 모두에서 스프링 부트 애플리케이션을 실행하는 방법은 무엇입니까?
현재 사용하려고 합니다.CommandLineRunner
와 함께ConfigurableApplicationContext
기본적으로 웹 응용 프로그램과 필요 시 독립 실행형 명령줄 응용 프로그램(명령줄 매개 변수를 통해) 모두에서 스프링 부트 응용 프로그램을 실행합니다.프로그램 인수가 제공될 때 콘솔 응용 프로그램으로만 실행하는 방법을 찾는 데 어려움을 겪고 있습니다.어떤 제안이든 도움이 될 것입니다.
저도 같은 요구사항이 있었습니다.이것이 제가 그것을 성취할 수 있었던 방법입니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplicationBuilder app = new SpringApplicationBuilder(Application.class);
if (args.length == 0) { // This can be any condition you want
app.web(WebApplicationType.SERVLET);
} else {
app.web(WebApplicationType.NONE);
}
app.run(args);
}
}
이것은 콘솔 애플리케이션 실행기입니다.
@Component
@ConditionalOnNotWebApplication
public class ConsoleApplication implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("************************** CONSOLE APP *********************************");
}
}
사용자가bootJar
응용프로그램을 웹 앱으로 실행할 수 있습니다.java -jar app.jar
명령행 앱으로 사용할 수 있습니다.java -jar app.jar anything #based on the condition you specified
.
이게 도움이 되길 바랍니다.
편집:
이를 위한 더 나은 방법은 Application.java를 다음과 같이 변경하고 위와 같이 ConsoleApplication.java를 유지하는 것입니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
그리고 실행합니다.bootJar
와 함께java -jar -Dspring.main.web-application-type=NONE app.jar
응용 프로그램을 콘솔 응용 프로그램으로 실행합니다.그리고 어떤 것도 통과하지 않는 것.spring.main.web-application-type
웹 응용 프로그램으로 실행됩니다.
그CommandLineRunner
인터페이스는 응용 프로그램이 시작된 후 명령줄 인수를 선택하는 유용한 방법을 제공하지만 응용 프로그램의 특성을 변경하는 데는 도움이 되지 않습니다.이미 알고 있듯이, 수신되는 웹 요청을 처리해야 한다고 생각하기 때문에 응용 프로그램이 종료되지 않을 수 있습니다.
당신의 주된 방법으로 취한 접근법은 제가 보기에 합리적인 것 같습니다.Spring Boot에 웹 응용 프로그램이 아니므로 시작된 후 수신 요청을 듣기 위해 시간을 낭비하지 않아야 합니다.
저는 다음과 같은 일을 할 것입니다.
public static void main(String[] args) {
SpringApplication application = new SpringApplication(AutoDbServiceApplication.class);
application.setWeb(ObjectUtils.isEmpty(args);
application.run(args);
}
그러면 응용 프로그램이 올바른 모드로 시작됩니다.그러면 다음을 사용할 수 있습니다.CommandLineRunner
현재와 같은 방식으로 콩을 만듭니다.또한 다음을 참조하십시오.ApplicationRunner
API가 조금 더 우수합니다.
@Component
public class AutoDbApplicationRunner implements ApplicationRunner {
public void run(ApplicationArguments args) {
if (ObjectUtils.isEmpty(args.getSourceArgs)) {
return; // Regular web application
}
// Do something with the args.
if (args.containsOption(“foo”)) {
// …
}
}
}
당신이 정말 원하지 않는다면.AutoDbApplicationRunner
나중에 사용할 수 있는 주요 방법으로 프로필을 설정할 수도 있습니다(참조).SpringApplication.setAdditionalProfiles
).
언급URL : https://stackoverflow.com/questions/45615729/how-to-run-spring-boot-application-both-as-a-web-application-as-well-as-a-comman
'programing' 카테고리의 다른 글
python3에서 OrderedDict를 정규 dict로 변환하는 방법 (0) | 2023.07.21 |
---|---|
Oracle DB에 여러 필드가 있는 조건부 고유 제약 조건 (0) | 2023.07.21 |
우체부: 필수 요청 부품 'file'이(가) 없습니다. (0) | 2023.07.21 |
LIKE(SQL)로 테이블 결합 (0) | 2023.07.21 |
Pandas df.to _csvpxfile.csv" encode="utf-8")은 여전히 빼기 기호에 대한 휴지통 문자를 제공합니다. (0) | 2023.07.21 |