Spring: 根据配置文件选择@Service

23

我有一个以下定义的接口:

public interface MyService {
}

还有两个实现它的类:

@Service
@Profile("dev")
public class DevImplementation implements MyService {
}

并且

@Service
@Profile("prod")
public class ProdImplementation implements MyService {
}

还有另一个服务正在尝试使用它:

@Service
public MyClass {
    @Autowired
    MyService myservice;
}

问题是当我运行代码时,出现了NoSuchBeanException。它是使用以下命令运行的:

mvn spring-boot:run -P dev

我做错了什么?

2个回答

18

使用-P参数可以启用Maven配置文件。但是,Maven配置文件和Spring配置文件是独立的。只有在你没有将Maven配置文件设置为相应的Spring属性时,才需要通过以下方式启用Spring配置文件:

mvn spring-boot:run -Dspring.profiles.active=dev

17

另一种方法是拥有一个生产配置文件,开发配置则隐式地不设置,例如:

Another way to do this is to have a production profile and the development is implicit on it not being set e.g.

@Component
@Profile("prod")
public class ProdImplementation implements MyService {
}

...而且开发者实现具有“!prod”配置文件。

@Component
@Profile("!prod")
public class DevImplementation implements MyService {
}

要在生产模式下运行,您必须输入配置文件...

> mvn spring-boot:run -Dspring.profiles.active=prod

...开发模式不需要配置文件...

> mvn spring-boot:run

在我看来,有点更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接