3

Spring Boot アプリケーションがあり、次の 3 つのプロパティ ファイルがありますapplications.properties, applications-dev.properties, applicaton-prod.propertiesapplications.properties私はそれを指定しますspring.profiles.active=prod。しかし、prod profile( ) なしでアプリケーションの起動を許可したいapplicaton-prod.properties。これは、Spring が dev profile( applications-dev.properties) でアプリケーションを自動的に起動する必要があることを意味します。どうすればこれを実装できますか? 注釈が存在する可能MissingOnProfile性がありますか?) 私の仕事は、application.properties ファイルに基づいてさまざまなアプリケーションの動作を作成することです。また@Profile、特定のプロファイルに依存する各 Bean で注釈を使用します。すべてのタスクは WebInstaller を作成することであり、最後のステップで application-prod.properties を作成し、それを使用してRestartEndpointアプリケーション コンテキストを再起動し、必要な Bean をインジェクトしますapplication-prod.properties。しかし、私はなしで起動する必要がありますapplication-prod.properties、しかし、このファイルが存在する場合、prod プロファイルで起動します。

4

4 に答える 4

1

たとえば、プロファイルを使用してある種のビジネス ロジックを手動で実装する必要がある場合は、デフォルトでアクティブなプロファイルを指定します。prod

  1. application.properties定義中spring.profiles.active=prod

たとえば、application-prod.propertiesが欠落している場合、アクティブなプロファイルは である必要があります。これを次のようにdev実装できます。EnvironmentPostProcessor

アプリケーション コンテキストが更新される前に、アプリケーションの環境をカスタマイズできます。

  1. EnvironmentPostProcessor ビジネス ロジックで実装する

    public class ProfileResolverEnvironmentPostProcessor implements EnvironmentPostProcessor {
    
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        ClassPathResource prodPropertiesResource = new ClassPathResource("application-prod.properties");
        // if "application-prod.properties" missing and "prod" profile active
        if (!prodPropertiesResource.exists() && environment.acceptsProfiles("prod")) {
            environment.setActiveProfiles("dev");
            //environment.addActiveProfile("dev");
        }
    }
    
    }
    
  2. EnvironmentPostProcessor実装クラスを登録しますMETA-INF/spring.factories

org.springframework.boot.env.EnvironmentPostProcessor=\ com.example.ProfileResolverEnvironmentPostProcessor

また、Spring Boot のドキュメント、環境のカスタマイズもご覧ください。

追加:

もちろん、プロファイルが欠落している場合にアクティブになる Beanを指定でき@Profile("!prod") ますspring.profiles.active=prodprodEnvironmentapplication-prod.properties

于 2018-08-01T01:47:07.767 に答える