[Spring] 선택해서 해당 xml 실행하게 만들기

    실행하기

    xml을 Scanner를 어떻게 받느냐에 따라서 어떻게 실행 할 수 있는지에 대한 설정이다.

    이에 실행하는 방법은 매우 간단하다.

     

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
    	profile="dev">
    
    	<bean id="serverInfo" class="com.day03.Ex03.ServerInfo">
    		<property name="ipNum" value="222.233.111.124" />
    		<property name="portNum" value="88" />
    	</bean>
    
    </beans>
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
    	profile="run">
    
    	<bean id="serverInfo" class="com.day03.Ex03.ServerInfo">
    		<property name="ipNum" value="213.186.229.29" />
    		<property name="portNum" value="80" />
    	</bean>
    
    </beans>

     

    xml은 2가지의 선택지가 존재한다.

    xml에서 6번째 줄을 보면 profile이 추가 된 것을 확인 할 수 있다.

    profile 설정에 따라 내가 원하는 xml을 선택 할 수 있게 도와주는 기능이다.

     

    package com.day03.Ex03;
    
    import java.util.Scanner;
    
    import org.springframework.context.support.GenericXmlApplicationContext;
    
    public class MainClass {
    
    	public static void main(String[] args) {
    
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("입력해주세요.");
    		String config = sc.next();
    	
    		sc.close();
    		
    		GenericXmlApplicationContext ctx
    		= new GenericXmlApplicationContext();
    		
    		ctx.getEnvironment().setActiveProfiles(config);
    		
    		ctx.load("AdminDay03Ex03_dev.xml","AdminDay03Ex03_run.xml");
    		
    		ServerInfo info = ctx.getBean("serverInfo", ServerInfo.class);
    		System.out.println("ip : "+info.getIpNum());
    		System.out.println("port : " + info.getPortNum());
    		ctx.close();
    	}
    }

    다만, xml을 그만큼 여러개를 둬야하는 단점도 있다. 여러개의 xml 중에서 모두를 갖고오지는 않고

    해당 Profile을 가진 것만 갖고 오게 하는 기능이다.

     

    xml이 여러개로 나눠지면서 유지보수도 쉬워지지만, 때로는 메모리 활용하는데 도움이 될지 모른다는 생각이 든다.

     

     

     

     

     

    밑에는 이제 Java 방식으로 변형이다.

    package com.day03.Ex04;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    
    
    @Configuration
    @Profile("dev")
    public class ApplicationConfigDev {
    
    	@Bean
    	public ServerInfo serverInfo() {
    		ServerInfo info = new ServerInfo();
    		info.setIpNum("localhost");
    		info.setPortNum("8181");
    
    		return info;
    	}
    }
    package com.day03.Ex04;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    
    @Configuration
    @Profile("run")
    public class ApplicationConfigRun {
    
    	@Bean
    	public ServerInfo serverInfo() {
    		ServerInfo info = new ServerInfo();
    		info.setIpNum("213.186.229.29");
    		info.setPortNum("80");
    
    		return info;
    	}
    }

    Dev와 Run이라는 Class를 만들게 되면 이제 이를 활용하는 방법이다.

     

     

     

    package com.day03.Ex04;
    
    import java.util.Scanner;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class MainClass {
    	public static void main(String[] args) {
    
    		Scanner sc = new Scanner(System.in);
    
    		System.out.println("입력해주세요.");
    		String config = sc.next();
    
    		sc.close();
    
    		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    
    		ctx.getEnvironment().setActiveProfiles(config);
    
    		ctx.register(ApplicationConfigDev.class, ApplicationConfigRun.class);
    		ctx.refresh();
    
    		ServerInfo info = ctx.getBean("serverInfo", ServerInfo.class);
    		System.out.println("ip : " + info.getIpNum());
    		System.out.println("port : " + info.getPortNum());
    
    		ctx.close();
    
    	}
    }

    약깐 심플?해진 방법이다.

    이 또한 2개의 class를 받아서 사용하는 것을 확인 할 수가 있다.

    반응형

    'Web > Spring' 카테고리의 다른 글

    [Spring] Spring MVC를 만들어보자  (0) 2020.10.23
    [Spring] AOP 사용하기(Java)  (0) 2020.10.22
    [Spring] AOP 사용하기  (0) 2020.10.22
    [Spring] AOP에 대해 알아보자  (0) 2020.10.22
    [Spring] xml 가져오기2(줄임 방식)  (0) 2020.10.22

    댓글

    Designed by JB FACTORY