当前位置: 首页 > 知识库问答 >
问题:

两个Spring Boot项目都带有@SpringBootApplication

和谦
2023-03-14

我有一个数据项目和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:找到多个@SpringBootConfiguration注释类

在数据项目的主类中,如果我将@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项目?

共有2个答案

暨弘懿
2023-03-14

在同一个包中不应该有两个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 {
}

第二包。

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;
    }
}

这是个糟糕的主意。请不要这么做。有两个不同的项目和一个共同的项目就好多了。

岳毅
2023-03-14

您需要指定要与@SpringBootTest一起使用的Spring Boot主类:

@SpringBootTest(classes = YourUiSpringBootApp.class)
 类似资料:
  • 我有两个代号为“一”的独立项目,它们都运行良好,现在我想将这两个项目合并为一个。我知道如何组合代码和类文件,但我想知道如何组合两个项目的文件,因为在一个文件,很难再次创建所有文件。请建议是否有任何方法我可以结合两个文件,或者我可以使用两个一个项目中的文件。e、 g。 项目1:名称:test1有主题。res文件和12个表格 项目2:名称:test2有主题。res文件和18表格 新项目:名称:Merg

  • 我正在构建一个命令行Java应用程序,在使用Apache Commons CLI解析命令行参数时遇到问题。 我试图讲述我的场景,其中我需要有两个独占的命令行参数组,分别具有长()和短()参数。 用例1 短params: 相同,但与长params: 用例2: 短参数: 相同但有长参数: 因此,我创建了两个带有适当的

  • > DAO层类型:jar Rest服务层类型:war,依赖:DAO{scope:default,type:jar}

  • 这是错误的完整轨迹: 这是我的cucumberRunner文件

  • 当试图在eclipse上运行spring boot maven项目时,会出现错误。“启动配置附件引用不存在的项目演示2.”请任何人帮忙修正那个错误。

  • 在eclipse中,我有两个项目,每个项目都用servlet填充。项目A在其生成路径中包含项目B。 提前感谢!