web-dev-qa-db-ja.com

Spring:プロファイルに基づいて@Serviceを選択する

私は以下のように定義するインターフェースを持っています:

public interface MyService {
}

そしてそれを実装する2つのクラス:

@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

何が悪いのですか?

15
shyam

-P Mavenプロファイルを有効にします。ただし、MavenプロファイルはSpringプロファイルから独立しています。 Mavenプロファイルが適切なSpringプロパティを設定するように構成されていない限り、Springプロファイルを次のように有効にする必要があります。

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

これを行うもう1つの方法は、プロダクションプロファイルを作成することです。

@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は少し簡単です。

6
bobmarksie