@SpringBootApplication을 모두 사용하는 두 개의 SpringBoot 프로젝트
저는 데이터 프로젝트와 UI 프로젝트가 있습니다.두 프로젝트 모두 Spring Boot 응용 프로그램입니다.두 프로젝트 모두 동일한 루트 패키지(com.myorg)를 가지고 있으며 주 클래스는 다음과 같이 주석이 달렸습니다.@SpringBootApplication
.
데이터 프로젝트의 주요 클래스는 다음과 같습니다.
package com.myorg;
@SpringBootApplication
public class DataApplication {
public static void main(String[] args) {
SpringApplication.run(DataApplication.class, args);
}
}
UI 프로젝트의 주요 클래스는 다음과 같습니다.
package com.myorg;
@SpringBootApplication
public class UiApplication {
public static void main(String[] args) {
SpringApplication.run(UiApplication .class, args);
}
}
UI 프로젝트는 다음 Gradle 종속성을 통해 데이터 프로젝트에 종속됩니다.
dependencies {
compile('com.myorg:data:1.0')
}
UI 애플리케이션을 실행하면 문제없이 실행됩니다.그러나 UI 응용 프로그램 내에서 다음과 같은 통합 테스트를 실행하는 경우:
package com.myorg
@RunWith(SpringRunner.class)
@SpringBootTest
public class UiIntTest {
@Test
public void contextLoads() {
}
}
다음 초기화 오류가 발생합니다.
java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes
데이터 프로젝트의 기본 클래스에서 대체할 경우@SpringBootApplication
와 함께
@Configuration
@EnableAutoConfiguration
@ComponentScan({ "com.myorg" })
통합 테스트를 실행할 때 다음 초기화 오류가 발생합니다.
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
예를 들어, 실행을 시도하는 경우:
package com.myorg
@RunWith(SpringRunner.class)
@SpringBootTest
public class DataIntTest {
@Test
public void contextLoads() {
}
}
어떻게 하면 데이터와 UI 프로젝트를 적절하게 구성할 수 있습니까?
함께 사용할 Spring Boot Main 클래스를 지정해야 합니다.@SpringBootTest
:
@SpringBootTest(classes = YourUiSpringBootApp.class)
동일한 패키지에 두 개의 SpringApplication 주석이 있으면 안 됩니다.
패키지 1.
twoapps.one;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackageClasses = {One.class})
@EnableAutoConfiguration
public class One extends SpringApplication {
}
패키지 2.
twoapps.two;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackageClasses = {Two.class})
@EnableAutoConfiguration
public class Two extends SpringApplication {
}
루트 패키지 및 시작 프로그램
package twoapps;
import org.springframework.boot.SpringApplication;
import twoapps.one.One;
import twoapps.two.Two;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Application {
public static void main(String[] args) throws Exception {
new Thread(() -> SpringApplication.run(One.class, args(args, "--spring.profiles.active=one"))).start();
new Thread(() -> SpringApplication.run(Two.class, args(args, "--spring.profiles.active=two"))).start();
}
private static String[] args(String[] args, String s) {
List<String> collect = Arrays.stream(args).collect(Collectors.toList());
collect.add(s);
String[] strings = collect.toArray(new String[]{});
return strings;
}
}
이것은 끔찍한 생각입니다.제발 그러지마.두 개의 다른 프로젝트와 하나의 공통 프로젝트가 있는 것이 훨씬 좋습니다.
언급URL : https://stackoverflow.com/questions/41730099/two-spring-boot-projects-both-with-springbootapplication
'programing' 카테고리의 다른 글
Spring Boot 시작 시 데이터베이스에 샘플 데이터 삽입 (0) | 2023.07.22 |
---|---|
ld: 'log2@@GLIBC_2.2.5' 기호에 대한 정의되지 않은 참조입니다. (0) | 2023.07.22 |
Python이 sys.path의 디렉토리에 있는 공유 객체를 찾을 수 없는 이유는 무엇입니까? (0) | 2023.07.22 |
Spring Boot에게 테스트를 위해 다른 DB를 사용하도록 지시하는 방법은 무엇입니까? (0) | 2023.07.22 |
Spring Cloud Security와 함께 OAuth2 "Token Exchange"를 구현하는 방법 (0) | 2023.07.22 |