Yanıtlar:
User1648825'in güzel basit cevabı genişletiliyor (Yorum yapamıyorum ve düzenlemem reddedildi):
@Value("${spring.profiles.active}")
private String activeProfile;
Hiçbir profiller ayarlanmamışsa bu bir IllegalArgumentException kurabilir (boş bir değer alırım). Eğer ayarlamanız gerekiyorsa bu iyi bir şey olabilir; değilse, @Value için 'varsayılan' sözdizimini kullanın, yani:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
spring.profiles.active çözümlenemediyse ... activeProfile artık 'Bilinmiyor' içeriyor
İşte daha eksiksiz bir örnek.
Autowire Ortamı
Önce çevre fasulyesini otomatik bağlamak isteyeceksiniz.
@Autowired
private Environment environment;
Aktif Profiller'de Profiller olup olmadığını kontrol edin
Ardından getActiveProfiles()
, profilin etkin profiller listesinde olup olmadığını öğrenmek için kullanabilirsiniz . Burada alır bir örnek String[]
ile ilgili getActiveProfiles()
daha sonra, bu diziden bir akışı alır, birden çok profil Varsa bir boolean döner (Örnek-duyarsız) kontrol etmek için matchers kullanır.
//Check if Active profiles contains "local" or "test"
if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
env -> (env.equalsIgnoreCase("test")
|| env.equalsIgnoreCase("local")) ))
{
doSomethingForLocalOrTest();
}
//Check if Active profiles contains "prod"
else if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
env -> (env.equalsIgnoreCase("prod")) ))
{
doSomethingForProd();
}
Benzer işlevleri, ek @Profile("local")
profiller , içeri aktarılan veya ortam parametresine dayalı seçici yapılandırmaya izin veren ek açıklama kullanarak da elde edebilirsiniz . İşte bu teknik hakkında daha fazla bilgi: Yay Profilleri
@Value("${spring.profiles.active}")
private String activeProfile;
Çalışır ve EnvironmentAware'i uygulamanız gerekmez. Ama bu yaklaşımın dezavantajlarını bilmiyorum.
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"
@Profile
. Uygulamalar ayrıca spring.profiles.include
özelliği kullanabilir ve kullanarak başlatma sırasında profilleri programlı olarak ayarlayabilir ConfigurableEnvironment
. Environment.getActiveProfiles()
bu mekanizmalardan herhangi birini kullanarak ayarlanmış profillerin tam listesini alır.
Otomatik kablolama kullanmıyorsanız, EnvironmentAware
Buna statik olarak erişebilmek için bazı talepler var gibi görünüyor.
İlkbahar yönetilmeyen sınıflardaki statik yöntemlerde böyle bir şeyi nasıl alabilirim? - Aetherus
Bu bir hack, ama ortaya çıkarmak için kendi sınıfınızı yazabilirsiniz. SpringContext.getEnvironment()
Tüm fasulye oluşturulmadan önce hiçbir şeyin çağrılmamasına dikkat etmelisiniz , çünkü bu bileşenin ne zaman başlatılacağına dair bir garanti yoktur.
@Component
public class SpringContext
{
private static Environment environment;
public SpringContext(Environment environment) {
SpringContext.environment = environment;
}
public static Environment getEnvironment() {
if (environment == null) {
throw new RuntimeException("Environment has not been set yet");
}
return environment;
}
}