Spring Boot アプリケーションがあり、次の 3 つのプロパティ ファイルがありますapplications.properties, applications-dev.properties, applicaton-prod.properties
。applications.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 に答える
たとえば、プロファイルを使用してある種のビジネス ロジックを手動で実装する必要がある場合は、デフォルトでアクティブなプロファイルを指定します。prod
application.properties
定義中spring.profiles.active=prod
たとえば、application-prod.properties
が欠落している場合、アクティブなプロファイルは である必要があります。これを次のようにdev
実装できます。EnvironmentPostProcessor
アプリケーション コンテキストが更新される前に、アプリケーションの環境をカスタマイズできます。
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"); } } }
EnvironmentPostProcessor
実装クラスを登録しますMETA-INF/spring.factories
org.springframework.boot.env.EnvironmentPostProcessor=\
com.example.ProfileResolverEnvironmentPostProcessor
また、Spring Boot のドキュメント、環境のカスタマイズもご覧ください。
追加:
もちろん、プロファイルが欠落している場合にアクティブになる Beanを指定でき@Profile("!prod")
ますspring.profiles.active=prod
。prod
Environment
application-prod.properties