웹개발/스프링부트

스프링부트 런타임시 호스트와 포트 주소 가져오기

수제개발자 2019. 3. 21. 15:43

https://stackoverflow.com/questions/38916213/how-to-get-the-spring-boot-host-and-port-address-during-run-time


일단 @SpringBootApplication 이 붙은 Applicaiton.java에서 ApplicationListner라는 인터페이스를 

구현해주고 거기서 받은 ip, port값을 다른클래스에서 사용할수 잇게 햇다...


Application.java 

@SpringBootApplication
public class Application implements ApplicationListener{	
	@Autowired
	private ApplicationContext applicationContext;	
	public int portnum;
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}		
	@Override
	public void onApplicationEvent(ApplicationEvent event) {
		// TODO Auto-generated method stub
		try {
		       String ip = InetAddress.getLocalHost().getHostAddress();
		       int port = applicationContext.getBean(Environment.class).getProperty("server.port", Integer.class, 8080);
		       portnum = port;		    
		   } catch (UnknownHostException e) {
		       e.printStackTrace();
		   }		
	}
}

- @SpringbootApplication이 붙은 클래스가 ApplicationListener를 구현하도록 한다

- onApplicationEvent라는 메소드를 오버라이딩한다

- ip는 InetAddress 클래스의 getLocalHost()로 Localhost객체를 불러온후 getHostAddress()로 가져온다

- 포트는 applicationContext 클래스를 통해 가져온다


WebController.java

@Controller
@AllArgsConstructor
public class WebController {

	  private PostsService postsService;	  
	  
	  private Application application;

	    @GetMapping("/")
	    public String main(Model model) {
	        model.addAttribute("posts", postsService.findAllDesc());
	        int portnum = application.portnum;
	        model.addAttribute("port", portnum);	        
        return "main";
	    }
}
원하는 클래스에서 Application.java에서 생성된 portnum이라는 변수를 가져와서 쓴다.