1

我有两个 SpringBoot 模块。commonsweb

commons模块中,我定义了一个 bean: 在此处输入图像描述

我可以在commons测试 中得到这个 bean在此处输入图像描述

但不幸的是,我无法从另一个模块中获取 bean。 在此处输入图像描述

我错了吗?我想commons从我的web模块中获取模块中定义的bean。

这是我的 ModulesApplication.java

package com.github.fish56.modules;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ModulesApplication {
    public static void main(String[] args) {
        SpringApplication.run(ModulesApplication.class, args);
    }
}

模块ApplicatonTest.java

package com.github.fish56.modules;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)
@SpringBootApplication
public class ModulesApplicationTest {
    @Test
    public void isEnvOk(){}
}

更新:有效

4

3 回答 3

0

您将无法从另一个 Spring 应用程序访问定义在一个 Spring 应用程序中的 bean。这是因为每个 Spring 应用程序单独管理其 bean 并具有独立的 ApplicationContext(用于在应用程序中获取 bean 的接口)。

于 2019-05-07T05:01:59.980 回答
0

为了扫描@Configurationbean,您需要指定基本包,@SpringBootApplication然后添加以下行,它将起作用。

@SpringBootApplication(scanBasePackages = {"com.github.fish56.modules.commons.config", 
                                           "com.github.fish56.modules"})
于 2019-05-07T11:46:24.700 回答
0

使用SpringBootTest注解:

@SpringBootTest(
  classes = {CommonsApplication.class, ModulesApplication.class})
@RunWith(SpringRunner.class)
public class ModulesApplicationTest {
    @Autowired
    private YmlConfig ymlConfig;

    @Test
    public void isEnvOk(){}
}

此外,您YmlConfigTest应该扩展ModulesApplicationTest课程。

于 2019-05-07T05:32:57.687 回答