如何在springboot中拥有同一类的两个实现(test和actual)?

jfewjypa  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(311)

我想有两个类实现同一个接口,但一个应该在测试运行时使用,另一个应该在实际代码运行时执行。这应该以环境为基础。因此,如果环境是“ci”,则应使用测试实现,如果环境是“开发”或“生产”,则应使用实际实现。如何使用springboot和遵循最佳实践来实现这一点?

kgsdhlau

kgsdhlau1#

一种方法是根据条件将类作为组件加载。
1.可以利用Spring轮廓。

@Profile("Cl")

这将根据激活的Spring配置文件相应地加载所需的类。
在application.properties中

spring.profiles.active=CL

示例代码:

public interface Sample {
    void runData();
}

@Component
@Profile("CL")
public class TestSample implements Sample {

    @Override
    public void runData(){
        // your code
    }
}

类似地,您可以为dev中需要的其他类设置profile
2.你也可以利用 @ConditionalOnProperty(name="propertyname" , havingValue="true") 您可以通过在相应环境的application.properties文件中设置“propertyname”来控制它
应用程序属性

propertyname=true

示例代码:

@Component
@ConditionalOnProperty(name="propertyname" , havingValue="true")
public class TestSample implements Sample {

    @Override
    public void runData(){
        // your code
    }
}

相关问题