- 
                            
                            Spring - Config파일을 통하여 DB연결 및 흐름도Spring/전자정부프레임워크 2024. 12. 23. 14:31반응형
1. 흐름 설명
1. context-datasource.xml에서 DataSource 정의:
- XML 파일에서 데이터베이스별 DataSource 빈을 정의합니다.
 - 각 DataSource 빈은 고유한 id를 가집니다. 예를 들어
 
<!-- MySQL DataSource --> <bean id="mysqlDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/{datbasename}" /> <property name="username" value="{username}" /> <property name="password" value="{password}" /> </bean>2. Java Config에서 XML의 빈 사용:
- Java Config에서 @Qualifier를 통해 XML에서 정의된 DataSource 빈을 참조합니다.
 - 예를 들어, mysqlSqlSessionFactory를 생성할 때 mysqlDataSource라는 DataSource 빈을 사용하도록 설정
 
@Bean(name = "mysqlSqlSessionFactory") public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource) throws Exception { return createSqlSessionFactory(mysqlDataSource, "classpath:/egovframework/sqlmap/example/mappers/{userpath}/*.xml"); }3. MyBatis와의 연결:
- Java Config에서 생성된 SqlSessionFactory는 MyBatis 매퍼와 연결됩니다.
 - @MapperScan을 통해 특정 패키지의 매퍼들이 올바른 SqlSessionFactory를 참조하도록 설정:
 
@MapperScan( basePackages = "{packagepath}", sqlSessionFactoryRef = "mysqlSqlSessionFactory" )
2. 일치시켜야 할 부분
2.1 XML의 bean id와 Java Config의 @Qualifier 이름
XML에서 정의한 DataSource의 id와 Java Config에서 사용한 @Qualifier 이름은 반드시 일치해야 합니다.
예시: MySQLConfig와 mysqlDataSource의 매칭
<!-- MySQL DataSource --> <bean id="mysqlDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/{datbasename}" /> <property name="username" value="{username}" /> <property name="password" value="{password}" /> </bean>JavaConfig
@Bean(name = "mysqlSqlSessionFactory") public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource) throws Exception { return createSqlSessionFactory(mysqlDataSource, "classpath:/egovframework/sqlmap/example/mappers/{userpath}/*.xml"); }일치해야 할 부분:
- XML의 <bean id="mysqlDataSource">와
 - Java Config의 @Qualifier("mysqlDataSource")의 이름이 동일해야 합니다.
 
2.2 SqlSessionFactory와 MyBatis 매퍼의 연결
SqlSessionFactory와 MyBatis 매퍼는 @MapperScan 어노테이션으로 연결됩니다.
예시: mysqlSqlSessionFactory와 매퍼 연결
@MapperScan( basePackages = "{userpath}", // 매퍼 패키지 경로 sqlSessionFactoryRef = "mysqlSqlSessionFactory" // 매퍼가 참조할 SqlSessionFactory )매퍼 패키지와 SqlSessionFactory 연결:
- 매퍼 패키지: {userpath}
 - SqlSessionFactory 이름: mysqlSqlSessionFactory
 
매퍼 XML 파일의 namespace 확인:
- 매퍼 인터페이스와 XML 매퍼의 namespace는 반드시 일치해야 합니다.
 - 매퍼 인터페이스
 
@Mapper public interface MySQLMapper { Integer testQuery(); }매퍼 XML:
<mapper namespace="{userpath}"> <select id="testQuery" resultType="int"> SELECT 1 </select> </mapper>
3. 요약
- XML에서 정의한 bean id와 Java Config에서 사용한 @Qualifier 이름이 일치해야 합니다.
 - MyBatis 매퍼와 SqlSessionFactory는 @MapperScan으로 명확히 연결해야 합니다.
 - 매퍼 인터페이스와 매퍼 XML 파일의 namespace가 동일해야 합니다.
 - 트랜잭션 매니저는 @Qualifier로 올바른 DataSource를 참조하도록 설정해야 합니다.
 
반응형'Spring > 전자정부프레임워크' 카테고리의 다른 글
Spring - Oracle 스키마별로 분리하여 연결하기 (0) 2024.12.27 Spring - Oracle 데이터베이스 연결 (0) 2024.12.27 Spring - 다중 데이터베이스 설정하기 (MySQL 스키마별 분리) (0) 2024.12.23 Spring - 다중 DB 연결하기 (0) 2024.12.23 Spring - 데이터베이스 연결 시 Config파일 파헤치기 (0) 2024.12.23