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。prodEnvironmentapplication-prod.properties