【问题标题】:Spring override bean of another moduleSpring覆盖另一个模块的bean
【发布时间】:2018-11-06 19:03:36
【问题描述】:

在我的多模块项目中,我将集成测试作为单独的模块。该测试已将应用程序 jar 添加为依赖项。是否可以从集成测试中覆盖应用程序 bean 定义?

在应用程序中,我有以下 Bean(标准 java 邮件发件人配置)

@Configuration
public class MailConfiguration {

   @Bean
   public JavaMailSender javaMailService() {
      JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
      //standard mail configuration using properties
   }
}

现在我所有的集成测试都扩展了加载测试配置类的 BaseIntegrationTest

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { AppTestConfiguration.class, MailTestConfiguration.class})
public class BaseIntegrationTest {

}

最后在我的 MailTestConfiguration 中我定义了另一个 JavaMailSender

@Primary
@Bean
@Profile(TestProfiles.MAIL_GREEN_SMTP)
public JavaMailSender javaMailService() {

    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    javaMailSender.setHost("localhost");
    javaMailSender.setPort(3025);

    return javaMailSender;
}

当我从应用程序本身运行测试时它正在工作。当我从另一个模块运行测试时,bean 不会被覆盖。

我知道在应用程序中定义的 AppConfiguration 类不能对集成测试配置类进行组件扫描,所以我也加载了 AppTestConfiguration。

@Configuration
@ComponentScan(basePackages = {"..."})
public class AppTestConfiguration extends AppConfiguration {

}

如何让它发挥作用?

【问题讨论】:

  • 您是否在子测试类中加载了正确的配置文件?此外,我会将 runwith 和 webappconfiguration 移至子测试类以避免任何令人讨厌的继承问题。

标签: java spring spring-mvc spring-mvc-test


【解决方案1】:

您应该检查两件事:

  1. 当您从另一个模块运行测试时,是否启用了正确的 Spring 配置文件?
  2. 当您从另一个模块运行测试时,扫描路径中是否有给定的配置?

【讨论】:

    【解决方案2】:

    当然,我搞砸了个人资料。在我的 BaseIntegrationTest 中,我根据配置定义了活动配置文件。我还打印了在那里解析的配置文件(打印了正确的配置文件名称)

    @课前 公共静态无效初始化(){ System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, ProfileResolver.getActiveProfiles()); }

    在您说服我它应该可以工作后,我重新检查了配置,发现我还在属性中添加了 spring.profiles.active。删除此配置后,一切都按预期工作。另一种方法是使用AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME 而不是AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2020-08-07
      • 2019-01-31
      • 2012-08-03
      • 2011-08-22
      相关资源
      最近更新 更多