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

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

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

kgsdhlau

kgsdhlau1#

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

  1. @Profile("Cl")

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

  1. spring.profiles.active=CL

示例代码:

  1. public interface Sample {
  2. void runData();
  3. }
  4. @Component
  5. @Profile("CL")
  6. public class TestSample implements Sample {
  7. @Override
  8. public void runData(){
  9. // your code
  10. }
  11. }

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

  1. propertyname=true

示例代码:

  1. @Component
  2. @ConditionalOnProperty(name="propertyname" , havingValue="true")
  3. public class TestSample implements Sample {
  4. @Override
  5. public void runData(){
  6. // your code
  7. }
  8. }
展开查看全部

相关问题