Jam*_*mes 9 spring spring-boot
我有一个数据项目和UI项目.这两个项目都是Spring Boot应用程序.两个项目都具有相同的根包(com.myorg),其中主类具有注释@SpringBootApplication.
数据项目的主要类是:
package com.myorg;
@SpringBootApplication
public class DataApplication {
public static void main(String[] args) {
SpringApplication.run(DataApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
UI项目的主要类是:
package com.myorg;
@SpringBootApplication
public class UiApplication {
public static void main(String[] args) {
SpringApplication.run(UiApplication .class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
UI项目通过以下Gradle依赖项依赖于数据项目:
dependencies {
compile('com.myorg:data:1.0')
}
Run Code Online (Sandbox Code Playgroud)
如果我运行UI应用程序,它运行没有问题.但是,如果我在UI应用程序中运行集成测试,如下所示:
package com.myorg
@RunWith(SpringRunner.class)
@SpringBootTest
public class UiIntTest {
@Test
public void contextLoads() {
}
}
Run Code Online (Sandbox Code Playgroud)
发生以下初始化错误:
java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes
在数据项目的主类中,如果我替换@SpringBootApplication为
@Configuration
@EnableAutoConfiguration
@ComponentScan({ "com.myorg" })
Run Code Online (Sandbox Code Playgroud)
尝试运行其集成测试时,我收到以下初始化错误:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
Run Code Online (Sandbox Code Playgroud)
例如,如果我尝试运行:
package com.myorg
@RunWith(SpringRunner.class)
@SpringBootTest
public class DataIntTest {
@Test
public void contextLoads() {
}
}
Run Code Online (Sandbox Code Playgroud)
如何正确配置数据和UI项目?
ale*_*xbt 25
您需要指定要使用的Spring Boot Main类@SpringBootTest:
@SpringBootTest(classes = YourUiSpringBootApp.class)
Run Code Online (Sandbox Code Playgroud)
您不应该在同一个包中有两个 SpringApplication 注释。
套餐一。
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 {
}
Run Code Online (Sandbox Code Playgroud)
套餐二。
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 {
}
Run Code Online (Sandbox Code Playgroud)
根包和启动器
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个可怕的想法。请不要这样做。最好有两个不同的项目和一个共同的项目。
| 归档时间: |
|
| 查看次数: |
9444 次 |
| 最近记录: |