Spring Boot は設定を外部化するので、同じ jar があらゆる環境で動きます。設定を application.yml (または .properties) に置き、コードに読み込み、profile で環境ごとに挙動を切り替えます。
application.yml と @Value
yaml
Spring Boot は設定を外部化するので、同じ jar があらゆる環境で動きます。設定を application.yml (または .properties) に置き、コードに読み込み、profile で環境ごとに挙動を切り替えます。
@Component
public class SearchService {
// Inject a single property; :20 is the fallback if it is missing.
@Value("${app.page-size:20}")
private int pageSize;
}
1 つか 2 つの値を超えるものは、@Value を散らばらせる代わりに型付きオブジェクトにバインドします:
@Component
@ConfigurationProperties(prefix = "app") // binds app.* into these fields
public class AppProps {
private int pageSize;
private Map<String, Boolean> featureFlags;
// getters/setters — Boot relaxed-binds page-size -> pageSize
}
これにより型安全性、IDE の自動補完、検証 (@Validated + 制約を追加) が得られます。
spring:
config:
activate:
on-profile: prod # only when 'prod' is active
server:
port: 80
application-dev.yml や application-prod.yml のようなファイルがベースの上に重なります。--spring.profiles.active=prod または SPRING_PROFILES_ACTIVE 環境変数で 1 つを有効化します。優先順位が重要です: コマンドライン引数と環境変数はファイルを上書きするので、シークレットは jar の外に留まります。
面接官は、リビルドせずに dev/staging/prod にまたがって 1 つの成果物を出荷できるか確認しています。散らばった @Value より @ConfigurationProperties を、シークレットにはファイルを上書きする環境変数を挙げることは、ローカルだけでなく本番で Boot アプリを運用したことを示します。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する