我的界面定义如下:
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
我做错了什么?
答案 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更容易。