Environment ํ๋กํ์ผ๊ณผ ํ๋กํผํฐ๋ฅผ ๋ค๋ฃจ๋ ์ธํฐํ์ด์ค
ApplicationContext extends EnvironmentCapable
- getEnvironment()
Environment
- EnvironmentCapable
ํ๋กํ์ผ
- ๋น๋ค์ ๊ทธ๋ฃน
- Environment์ ์ญํ ์ ํ์ฑํํ ํ๋กํ์ผ ํ์ธ ๋ฐ ์ค์
ํ๋กํ์ผ ์ ์ฆ์ผ์ด์ค
- ํ ์คํธ ํ๊ฒฝ์์๋ A๋ผ๋ ๋น์ ์ฌ์ฉํ๊ณ , ๋ฐฐํฌ ํ๊ฒฝ์์๋ B๋ผ๋ ๋น์ ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ!
- ์ด ๋น์ ๋ชจ๋ํฐ๋ง ์ฉ๋๋๊น ํ ์คํธํ ๋๋ ํ์๊ฐ ์๊ณ ๋ฐฐํฌํ ๋๋ง ๋ฑ๋ก์ด ๋๋ฉด ์ข๊ฒ ๋ค!
- 1. ๊ฐ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ผ.. ๋ค๋ฅธ ๋น๋ค์ ์จ์ผํ๋ ๊ฒฝ์ฐ!
- 2. ํน์ ํ๊ฒฝ์์๋ง ์ด๋ค ๋น์ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ
ํ๋กํ์ผ ์ ์ํ๊ธฐ
- ํด๋์ค์ ์ ์
- @Configuration @Profile("test")
- @Component @Profile("test")
- ๋ฉ์๋์ ์ ์
- @Bean @Profile("test")
package com.example.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext ctx;
@Autowired
BookRepository bookRepository;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println(Arrays.toString(environment.getActiveProfiles()));//[]
System.out.println(Arrays.toString(environment.getDefaultProfiles()));//[Default]
}
}
1-1. ํด๋์ค์ ์ ์ @Configuration
@Configuration ์ด ๋ถ์ ํด๋์ค์ Profile์ test๋ก ์ง์ ํด์ฃผ๋ฉด,..
package com.example.demospring51;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@Profile("test") //testํ๋กํ์ผ๋ก ์ด application์ ์คํํ๊ธฐ ์ ๊น์ง๋ ์ด ๋น์ค์ ํ์ผ์ด ์ ์ฉ์ด ์๋๋ค. testํ๋กํ์ผ๋ก ์คํํ ๋๋ง ์คํ๋๋ ๋น ์ค์ ํ์ผ์ด ๋๋ค,.
public class TestConfiguration {
@Bean
public BookRepository bookRepository(){
return new TestBookRepository();
}
}
๊ทธ๋ฅ ์คํํ๋ฉด ์๋ฌ๊ฐ ๋๊ฒ ๋๋๋ฐ (์? test๋ผ๋ profile์ด ์ ์ฉ์ด ์๋๊ธฐ๋๋ฌธ์ ๋น ์ค์ ํ์ผ์ด ์์ฝํ๊ณ , ๋น ์ฃผ์ ์ด ์คํจํ๊ธฐ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.)
ํด๊ฒฐ ๋ฐฉ๋ฒ 2๊ฐ์ง..
ํ๋กํ์ผ ์ค์ ํ๊ธฐ
- -Dspring.profiles.active="test,A,B....."
- @ActiveProfiles (ํ ์คํธ์ฉ)
1. Active profiles : test ๋ก ์ ์ฉ (community ๋ฒ์ ์์๋ ์๋ณด์ผ์๊ฐ ์์)
2. VM options : -Dspring-.profiles.active="test" ๋ฅผ ์ ์ฉ
๊ทธ๋ฆฌ๊ณ ์คํํ๋ฉด?
test ํ๋กํ์ผ์ด ์ ์ฉ๋๊ฒ์ ํ์ธ ํ ์ ์๋ค.
- @Component @Profile
package com.example.demospring51;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Repository;
@Repository
@Profile("test") //@Repository์ ์ ์ฉ์ ํด์ค๋ค.
public interface BookRepository {
}
2. ๋ฉ์๋์ ์ ์
- @Bean @Profile("test")
package com.example.demospring51;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
//@Profile("test") //testํ๋กํ์ผ๋ก ์ด application์ ์คํํ๊ธฐ ์ ๊น์ง๋ ์ด ๋น์ค์ ํ์ผ์ด ์ ์ฉ์ด ์๋๋ค.
//testํ๋กํ์ผ๋ก ์คํํ ๋๋ง ์คํ๋๋ ๋น ์ค์ ํ์ผ์ด ๋๋ค,.
public class TestConfiguration {
@Bean
@Profile("test") // **๋น์ profile ์ ์ฉ
public BookRepository bookRepository(){
return new TestBookRepository();
}
}
ํ๋กํ์ผ ํํ์
- ! (not)
- & (and)
- | (or)
@Profile("!test") //test๊ฐ ์๋ ๊ฒฝ์ฐ์
@Profile("!test & !prod") //test, prod ๋ ๋ค ์๋ ๊ฒฝ์ฐ
@Profile("!test | !prod") //test ๋๋ prod ๋ ์ค์ ํ๋๋ผ๋ ์๋ ๊ฒฝ์ฐ
ํญ์ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ์ด ์ข๋ค. ๋ด๊ฐ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ๊ฐ๋จํ ํํ์์ ์ฌ์ฉํ๋๊ฒ ์ข์ ์ฝ๋์ด๋ค.