본문 바로가기

학원/스프링-학원

외부 파일을 이용한 설정

728x90

Environment 객체

 

 

두 번째 인터페이스는 Environment객체를 사용하기 위함

 

ps에는 세팅할 정보를 추가할 수 있는데 이때 addLast를 사용하고, 가져올 때는 getProperty사용

 

예제

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//AdminConnection 
package com.javalec.spring_8_1;
 
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
 
public class AdminConnection implements InitializingBean, EnvironmentAware{
    private Environment env;
    private String adminId;
    private String adminPw;
    
    //객체 생성되기 이전
    @Override
    public void setEnvironment(Environment environment) {
        System.out.println("setEnvironment()");
        setEnv(environment);
        //env필드에 environment 객체가 들어가게 됨
    }
    
    //객체 생성된 후
    @Override
    public void afterPropertiesSet() throws Exception {    
        System.out.println("afterPropertiesSet()");
        //file에 있는 값을 가져옴
        //set에 이 값들을 넣기 때문에 멤버변수들에 이 값들이 설정됨
        setAdminId(env.getProperty("admin.id"));
        setAdminPw(env.getProperty("admin.pw"));
    }
    
    public Environment getEnv() {
        return env;
    }
    public void setEnv(Environment env) {
        this.env = env;
    }
    public String getAdminId() {
        return adminId;
    }
    public void setAdminId(String adminId) {
        this.adminId = adminId;
    }
    public String getAdminPw() {
        return adminPw;
    }
    public void setAdminPw(String adminPw) {
        this.adminPw = adminPw;
    }    
}
 
//MainClass 
package com.javalec.spring_8_1;
 
import java.io.IOException;
 
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.io.support.ResourcePropertySource;
 
public class MainClass {
    public static void main(String[] args) {        
        ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
        ConfigurableEnvironment env = ctx.getEnvironment();
        //이 객체를 사용해서 외부파일 추가할 것
        MutablePropertySources propertySources = env.getPropertySources();
        
        try {
            //이 객체에 저 경로의 외부파일을 세팅
            propertySources.addLast(new ResourcePropertySource("classpath:admin.properties"));
            //AdminConnection 클래스 파일을 사용하지 않고도 외부파일의 값 가져왔음
            System.out.println(env.getProperty("admin.id"));
            System.out.println(env.getProperty("admin.pw"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        GenericXmlApplicationContext gctx = (GenericXmlApplicationContext) ctx;
        gctx.load("applicationCTX.xml");
        gctx.refresh();
        
        AdminConnection adminConnection = gctx.getBean("adminConnection",AdminConnection.class);
        //AdminConnection 파일에서 Environment가 제대로 작동해서 값이 들어와 있음
        System.out.println("admin ID : "+adminConnection.getAdminId());
        System.out.println("admin PW : "+adminConnection.getAdminPw());
    }
}
 
cs

 

<xml>

 

1
2
3
4
5
6
7
<?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">
 
    <bean class="com.javalec.spring_8_1.AdminConnection" id="adminConnection"></bean>
</beans>
cs

 

<admin.properties>

 

admin.id=abcde
admin.pw=12345

 

 

프로퍼티 파일을 이용한 설정

 

xml과 java파일 2가지 형태가 있음

 

<외부파일>

admin.properties

admin.id=abcde
admin.pw=12345

 

sub_admin.properties

sub_admin.id=fghij
sub_admin.pw=67890

예제 1 - xml

context를 사용하기 때문에 namespace에서 context 체크하고 사용

외부 파일의 값을 세팅하는 방법은 제이쿼리의 형태로 가져와서 세팅

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//AdminConnection 
package com.javalec.spring_8_2;
 
public class AdminConnection {
    private String adminId;
    private String adminPw;
    private String sub_adminId;
    private String sub_adminPw;
    
    public String getAdminId() {
        return adminId;
    }
    public void setAdminId(String adminId) {
        this.adminId = adminId;
    }
    public String getAdminPw() {
        return adminPw;
    }
    public void setAdminPw(String adminPw) {
        this.adminPw = adminPw;
    }
    public String getSub_adminId() {
        return sub_adminId;
    }
    public void setSub_adminId(String sub_adminId) {
        this.sub_adminId = sub_adminId;
    }
    public String getSub_adminPw() {
        return sub_adminPw;
    }
    public void setSub_adminPw(String sub_adminPw) {
        this.sub_adminPw = sub_adminPw;
    }
}
 
//MainClass
package com.javalec.spring_8_2;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        AbstractApplicationContext ctx = new GenericXmlApplicationContext("applicationCTX.xml");
        AdminConnection adminConnection = ctx.getBean("adminConnection",AdminConnection.class);
        System.out.println("adminID : "+adminConnection.getAdminId());
        System.out.println("adminPW : "+adminConnection.getAdminPw());
        System.out.println("sub_adminID : "+adminConnection.getSub_adminId());
        System.out.println("sub_adminPW : "+adminConnection.getSub_adminPw());
    }
}
cs

 

<xml>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
 
    <!-- 외부파일을 참조값으로 사용 가능해짐 -->
    <context:property-placeholder
        location="classpath:admin.properties, classpath:sub_admin.properties"
    />
    
    <bean class="com.javalec.spring_8_2.AdminConnection" id="adminConnection">
        <property name="adminId">
            <value>${admin.id}</value>
        </property>
        <property name="adminPw">
            <value>${admin.pw}</value>
        </property>
        <property name="sub_adminId">
            <value>${sub_admin.id}</value>
        </property>
        <property name="sub_adminPw">
            <value>${sub_admin.pw}</value>
        </property>
    </bean>
</beans>
cs

 

예제 2 - java

xml의 context 대신 위의 그림에 있는 메서드 사용

자바에서는 값을 세팅할 때 어노테이션 value사용하고 값을 가져오는 방법은 동일하게 제이쿼리 형태

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//AdminConnection 
package com.javalec.spring_8_2_2;
 
public class AdminConnection {
    private String adminId;
    private String adminPw;
    private String sub_adminId;
    private String sub_adminPw;
    
    public String getAdminId() {
        return adminId;
    }
    public void setAdminId(String adminId) {
        this.adminId = adminId;
    }
    public String getAdminPw() {
        return adminPw;
    }
    public void setAdminPw(String adminPw) {
        this.adminPw = adminPw;
    }
    public String getSub_adminId() {
        return sub_adminId;
    }
    public void setSub_adminId(String sub_adminId) {
        this.sub_adminId = sub_adminId;
    }
    public String getSub_adminPw() {
        return sub_adminPw;
    }
    public void setSub_adminPw(String sub_adminPw) {
        this.sub_adminPw = sub_adminPw;
    }
}
 
//ApplicationConfig
package com.javalec.spring_8_2_2;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
@Configuration
public class ApplicationConfig {
    
    //value 어노테이션을 사용해서 참조값을 set 역할로 저장
    @Value("${admin.id}")
    private String adminId;
    
    @Value("${admin.pw}")
    private String adminPw;
    
    @Value("${sub_admin.id}")
    private String sub_adminId;
    
    @Value("${sub_admin.pw}")
    private String sub_adminPw;
 
    
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        
        Resource[] locations = new Resource[2];
        //이 path에 외부파일 들어가게 됨
        locations[0= new ClassPathResource("admin.properties");
        locations[1= new ClassPathResource("sub_admin.properties");
        //위의 2개의 외부파일 경로에서 값을 가져옴
        configurer.setLocations(locations);
        
        return configurer;
    }
    
    //AdminConnection에 있는 필드 값으로 외부파일의 값들이 들어가게 됨
    @Bean
    public AdminConnection adminConnection() {
        AdminConnection adminConnection = new AdminConnection();
        adminConnection.setAdminId(adminId);
        adminConnection.setAdminPw(adminPw);
        adminConnection.setSub_adminId(sub_adminId);
        adminConnection.setSub_adminPw(sub_adminPw);
        
        return adminConnection;
    }
}
 
//MainClass
package com.javalec.spring_8_2_2;
 
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
        AdminConnection adminConnection = ctx.getBean("adminConnection",AdminConnection.class);
        
        System.out.println("adminID : "+adminConnection.getAdminId());
        System.out.println("adminPW : "+adminConnection.getAdminPw());
        System.out.println("sub_adminID : "+adminConnection.getSub_adminId());
        System.out.println("sub_adminPW : "+adminConnection.getSub_adminPw());
    }
}
cs

 

 

프로파일 속성을 이용한 설정

 

dev는 개발 서버, run은 운영서버

 

예제 1 - xml파일로 설정

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//ServerInfo 
package com.javalec.spring_8_3_1;
 
public class ServerInfo {
    private String ipNum;
    private String portNum;
    
    public String getIpNum() {
        return ipNum;
    }
    public void setIpNum(String ipNum) {
        this.ipNum = ipNum;
    }
    public String getPortNum() {
        return portNum;
    }
    public void setPortNum(String portNum) {
        this.portNum = portNum;
    }
}
 
//MainClass 
package com.javalec.spring_8_3_1;
 
import java.util.Scanner;
 
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        String config = "";
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        
        if (str.equals("dev")) {
            config="dev";
        }else if (str.equals("run")) {
            config="run";            
        }
        scanner.close();
        
        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
        ctx.getEnvironment().setActiveProfiles(config);
        //config에서 프로파일 이름을 보고 알아서 찾아감
        ctx.load("applicationCTX_dev.xml""applicationCTX_run.xml");
        ServerInfo info = ctx.getBean("serverInfo",ServerInfo.class);
        System.out.println("ip : "+info.getIpNum());
        System.out.println("port : "+info.getPortNum());
    }
}
cs

 

<xml>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//applicationCTX_dev
<?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 class="com.javalec.spring_8_3_1.ServerInfo" id="serverInfo">
        <property name="ipNum" value="localhost"></property>
        <property name="portNum" value="8181"></property>
    </bean>
</beans>
 
//applicationCTX_run
<?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 class="com.javalec.spring_8_3_1.ServerInfo" id="serverInfo">
        <property name="ipNum" value="213.186.229.29"></property>
        <property name="portNum" value="80"></property>
    </bean>
</beans>
cs

 

 

dev를 입력했을 때

 

 

run을 입력했을 때

 

실제로는 이렇게 입력하는 방식으로 사용하지는 않음 - 예제이기 때문에 이러한 형식으로 사용

 

예제 2 - java 파일로 설정

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//ApplicationConfigDev 
package com.javalec.spring_8_3_2;
 
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;        
    }
}
 
//ApplicationConfigRun 
package com.javalec.spring_8_3_2;
 
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;        
    }
}
 
//MainClass 
package com.javalec.spring_8_3_2;
 
import java.util.Scanner;
 
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        String config = "";
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        
        if (str.equals("dev")) {
            config="dev";
        }else if (str.equals("run")) {
            config="run";            
        }
        scanner.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());
    }
}
cs

 

ServerInfo.java는 위의 예제에서 했던거 그대로 사용

 

이렇게 실행해도 결과는 xml을 사용한 것과 동일하게 출력

 

문제 1

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//EmpConnection
package com.javalec.spring_ex8_1;
 
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
 
public class EmpConnection implements EnvironmentAware, InitializingBean{
    private Environment env;
    private String empId;
    private String empPw;
    
    @Override
    public void setEnvironment(Environment environment) {
        setEnv(environment);
    }
    
    @Override
    public void afterPropertiesSet() throws Exception {
        setEmpId(env.getProperty("emp.id"));
        setEmpPw(env.getProperty("emp.pw"));
    }
    
    public Environment getEnv() {
        return env;
    }
    public void setEnv(Environment env) {
        this.env = env;
    }
    public String getEmpId() {
        return empId;
    }
    public void setEmpId(String empId) {
        this.empId = empId;
    }
    public String getEmpPw() {
        return empPw;
    }
    public void setEmpPw(String empPw) {
        this.empPw = empPw;
    }    
}
 
//MainClass 
package com.javalec.spring_ex8_1;
 
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.io.support.ResourcePropertySource;
 
public class MainClass {
    public static void main(String[] args) {
         ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
         ConfigurableEnvironment env = ctx.getEnvironment();
         MutablePropertySources propertySources = env.getPropertySources();
         
         try {
            propertySources.addLast(new ResourcePropertySource("classpath:oracle.account"));
            System.out.println(env.getProperty("emp.id"));
            System.out.println(env.getProperty("emp.pw"));
        } catch (Exception e) {
            e.printStackTrace();
        }
         
         GenericXmlApplicationContext gctx = (GenericXmlApplicationContext) ctx;
         gctx.load("applicationCTX.xml");
         gctx.refresh();
         
         EmpConnection empConnection = gctx.getBean("empConnection",EmpConnection.class);
         System.out.println("emp ID : "+empConnection.getEmpId());
         System.out.println("emp PW : "+empConnection.getEmpPw());
    }
}
cs

 

<xml>

 

 

<외부 파일 - oracle.account>

emp.id=scott
emp.pw=tiger

 

문제 2

 

<파일>

 

//mssql.account
ms_student.id = stu101
ms_student.pw = 1234

//mssql.account
my_student.id = stu201
my_student.pw = 5678

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//DbConnection 
package com.javalec.spring_ex8_2;
 
public class DbConnection {
    private String mssqlId;
    private String mssqlPw;
    private String mysqlId;
    private String mysqlPw;
    
    public String getMssqlId() {
        return mssqlId;
    }
    public void setMssqlId(String mssqlId) {
        this.mssqlId = mssqlId;
    }
    public String getMssqlPw() {
        return mssqlPw;
    }
    public void setMssqlPw(String mssqlPw) {
        this.mssqlPw = mssqlPw;
    }
    public String getMysqlId() {
        return mysqlId;
    }
    public void setMysqlId(String mysqlId) {
        this.mysqlId = mysqlId;
    }
    public String getMysqlPw() {
        return mysqlPw;
    }
    public void setMysqlPw(String mysqlPw) {
        this.mysqlPw = mysqlPw;
    }
}
 
//MainClass 
package com.javalec.spring_ex8_2;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        AbstractApplicationContext ctx = new GenericXmlApplicationContext("applicationCTX.xml");
        DbConnection dbConnection = ctx.getBean("dbConnection",DbConnection.class);
        
        System.out.println("mssqlID : "+dbConnection.getMssqlId());
        System.out.println("mssqlPW : "+dbConnection.getMssqlPw());
        System.out.println("mysqlID : "+dbConnection.getMysqlId());
        System.out.println("mysqlPW : "+dbConnection.getMysqlPw());
    }
}
cs

 

<xml>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//applicationCTX
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
    <context:property-placeholder
        location="classpath:mssql.account,classpath:mysql.account"
    />
    <bean class="com.javalec.spring_ex8_2.DbConnection" id="dbConnection">
        <property name="mssqlId">
            <value>${ms_student.id}</value>
        </property>
        <property name="mssqlPw">
            <value>${ms_student.pw}</value>
        </property>
        <property name="mysqlId">
            <value>${my_student.id}</value>
        </property>
        <property name="mysqlPw">
            <value>${my_student.pw}</value>
        </property>
    </bean>
</beans>
cs

 

문제 3

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//DbInfo 
package com.javalec.spring_ex8_3;
 
public class DbInfo {
    private String driver;
    private String url;
    private String user;
    private String password;
    public String getDriver() {
        return driver;
    }
    public void setDriver(String driver) {
        this.driver = driver;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
 
//MainClass 
package com.javalec.spring_ex8_3;
 
import java.util.Scanner;
 
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String config = "";
        String str = scanner.next();
        
        if (str.equals("oracle")) {
            config="oracle";
        }else if (str.equals("mysql")) {
                config="mysql";            
        }
        scanner.close();
        
        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
        ctx.getEnvironment().setActiveProfiles(config);
        ctx.load("oracleCTX.xml","mysqlCTX.xml");
        DbInfo dbInfo = ctx.getBean("dbInfo",DbInfo.class);
        System.out.println("driver : "+dbInfo.getDriver());
        System.out.println("url : "+dbInfo.getUrl());
        System.out.println("user : "+dbInfo.getUser());
        System.out.println("pwd : "+dbInfo.getPassword());
    }
}
cs

 

<xml>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//oracleCTX
<?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="oracle"
    >
 
    <bean class="com.javalec.spring_ex8_3.DbInfo" id="dbInfo">
        <property name="driver">
            <value>oracle.jdbc.driver.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:this:@localhost:1521:ORCL</value>
        </property>
        <property name="user">
            <value>scott</value>
        </property>
        <property name="password">
            <value>tiger</value>
        </property>
    </bean>
</beans>
 
//mysqlCTX
<?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="mysql"
    >
 
    <bean class="com.javalec.spring_ex8_3.DbInfo" id="dbInfo">
        <property name="driver">
            <value>com.mysql.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost:3306/JSPDB</value>
        </property>
        <property name="user">
            <value>root</value>
        </property>
        <property name="password">
            <value>mysql</value>
        </property>
    </bean>
</beans>
cs

 

문제 4

 

<클래스>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//JdbcDriver 
package com.javalec.spring_ex8_4;
 
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
 
public class JdbcDriver implements EnvironmentAware, InitializingBean{
    private Environment env;
    private String oracleJdbcDriver;
    private String mysqlJdbcDriver;
    
    @Override
    public void setEnvironment(Environment environment) {
        setEnv(environment);        
    }
    
    @Override
    public void afterPropertiesSet() throws Exception {
//        setOracleJdbcDriver("oracle");
//        setMysqlJdbcDriver("mysql");
        setOracleJdbcDriver("oracle.jdbc.driver.OracleDriver");
        setMysqlJdbcDriver("com.mysql.jdbc.Driver");
    }
    
    public Environment getEnv() {
        return env;
    }
    public void setEnv(Environment env) {
        this.env = env;
    }
    public String getOracleJdbcDriver() {
        return oracleJdbcDriver;
    }
    public void setOracleJdbcDriver(String oracleJdbcDriver) {
        this.oracleJdbcDriver = oracleJdbcDriver;
    }
    public String getMysqlJdbcDriver() {
        return mysqlJdbcDriver;
    }
    public void setMysqlJdbcDriver(String mysqlJdbcDriver) {
        this.mysqlJdbcDriver = mysqlJdbcDriver;
    }
}
 
//MainClass 
package com.javalec.spring_ex8_4;
 
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.io.support.ResourcePropertySource;
 
public class MainClass {
    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
        ConfigurableEnvironment env = ctx.getEnvironment();
        MutablePropertySources propertySources = env.getPropertySources();
        
        try {
            propertySources.addLast(new ResourcePropertySource("classpath:jdbc.driver"));
            System.out.println(env.getProperty("oracle"));
            System.out.println(env.getProperty("mysql"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        GenericXmlApplicationContext gctx = (GenericXmlApplicationContext) ctx;
        gctx.load("applicationCTX.xml");
        gctx.refresh();
        
        JdbcDriver jdbcDriver = gctx.getBean("jdbcDriver",JdbcDriver.class);
        System.out.println("OracleJdbcDriver : "+jdbcDriver.getOracleJdbcDriver());
        System.out.println("MySqlJdbcDriver : "+jdbcDriver.getMysqlJdbcDriver());
    }
}
cs

 

<xml>

 

 

 

728x90

'학원 > 스프링-학원' 카테고리의 다른 글

MVC 기초  (0) 2022.05.16
AOP(Aspect Oriented Programming)  (0) 2022.05.13
생명주기(LIFE CYCLE)와 범위(SCOPE)  (0) 2022.05.11
DI 설정 방법  (0) 2022.05.10
DI - 2  (0) 2022.05.10