src/
└── main/
├── java/com/example/demo/
│ ├── DemoApplication.java
│ ├── config/
│ │ └── AppConfig.java ← バインディングクラス
│ └── controller/
│ └── SampleController.java ← 動作確認用コントローラ
└── resources/
└── application.yml ← 設定ファイル(1ファイルのみ)
spring:
profiles:
active: sit
custom:
api-url:
ut: https://api-ut.example.com
it: https://api-it.example.com
sit: https://api-sit.example.com
vst: https://api-vst.example.com
uat: https://api-uat.example.com
prod: https://api.example.com
datasource:
url:
ut: jdbc:mysql://ut-db:3306/db
it: jdbc:mysql://it-db:3306/db
sit: jdbc:mysql://sit-db:3306/db
vst: jdbc:mysql://vst-db:3306/db
uat: jdbc:mysql://uat-db:3306/db
prod: jdbc:mysql://prod-db:3306/db
@Component
@ConfigurationProperties(prefix = "custom")
public class AppConfig {
private Map<String, DataSourceConfig> datasource;
private Map<String, String> apiUrl;
public Map<String, DataSourceConfig> getDatasource() {
return datasource;
}
public void setDatasource(Map<String, DataSourceConfig> datasource) {
this.datasource = datasource;
}
public Map<String, String> getApiUrl() {
return apiUrl;
}
public void setApiUrl(Map<String, String> apiUrl) {
this.apiUrl = apiUrl;
}
public DataSourceConfig getDatasourceForProfile(String profile) {
return datasource.get(profile);
}
public String getApiUrlForProfile(String profile) {
return apiUrl.get(profile);
}
}
package com.example.demo.controller;
import com.example.demo.config.AppConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/config")
public class SampleController {
private final AppConfig appConfig;
@Value("${spring.profiles.active}")
private String activeProfile;
public SampleController(AppConfig appConfig) {
this.appConfig = appConfig;
}
@GetMapping
public String getConfig() {
String apiUrl = appConfig.getApiUrlForProfile(activeProfile);
String datasourceUrl = appConfig.getDatasourceUrlForProfile(activeProfile);
return String.format("Active Profile: %s\nAPI URL: %s\nDB URL: %s", activeProfile, apiUrl, datasourceUrl);
}
}
public class DataSourceConfig {
private String url;
private String username;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@SpringBootApplication
@ConfigurationPropertiesScan // ← AppConfig の自動スキャン
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}