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

时间:2017-01-27 10:24:52

标签: java spring autowired spring-profiles

我的界面定义如下:

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 个答案:

答案 0 :(得分:9)

使用-P启用Maven个人资料。但Maven配置文件独立于Spring配置文件。只要您没有配置Maven配置文件来设置适当的Spring属性,就必须以这种方式启用Spring配置文件:

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

答案 1 :(得分:4)

另一种方法是使用生产配置文件,并且开发隐含在未设置的位置,例如。

@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

IMO更容易。