본문 바로가기

프로그래밍 회고록/Java & Spring

DB JNDI환경설정을 Spring에서 Annotation로 Dbconfig설정하기

728x90
반응형

# WAS 설정 변경

JNDI방식은 익숙하게 사용하는 JDBC API를 활용하는것과는 다른 실행구조를 가진다.

JDBC의 경우 웹 어플리케이션 내부에서 연결해 데이터베이스를 호출하는 느낌이라면 JNDI의 경우에는 WAS에서 DB를 연결을 해놓은 후 웹어플리케이션은 그 연결된 WAS서버에서 데이터베이스를 호출하게된다. 따라서 JNDI를 활용하기 위해서는 WAS에서 DB환경설정을 한다.

나 같은 경우에는 WAS를 JEUS를 사용했기에  WEB_ADMIN에서 Resource  > Database 를 들어가 Add+를 눌러 DB를  세팅한다.

Resource  > Database

그 이후 Server와 연동을 해야한다.  Data Sources 에서 적용한 Data를 넣어주고 저장한다.

 

# Java > Spring 설정 변경하기

@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
	
    //JNDI 설정을 위해서 WAS의 값을 가져오는 코드
    @Bean
    public DataSource dataSource() throws DataSourceLookupFailureException{
    	JndiDataSourceLookup jdsl = new JndiDataSourceLookup();
    	jdsl.setResourceRef(true);
    	DataSource dataSource = jdsl.getDataSource("asradm");
    	
    	return dataSource;
    }
	
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(dataSource);
		PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		sessionFactory.setConfigLocation(resolver.getResource("mybatis설정파일"));
		sessionFactory.setMapperLocations(resolver.getResources("mybatisXML파일위치"));
	    
		return sessionFactory.getObject();
	}
	  
	@Bean
	public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
		final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
		return sqlSessionTemplate;
	}
}

 

Spring의 경우 JNDI 설정을 할 때 config를 XML 설정으로 빼는 설정이 많아서 설정을 수정하기가 어려웠다. (Java Config로 세팅하는 법에 대해서 공부를 좀 해야할 것같다. 인터넷에 자료가 나오지 않는다면 막막해..)

Java Config로 수정하는 경우 dataSource 메소드 생성시  JndiDataSourceLookup 클래스 객체를 생성한뒤에 setResourceRef 메소드를 통해 resource-ref 속성에 대한 설정을 한다. 그리고 dataSource에 WAS에 설정해놓은 DB객체를 가져와서 설정해놓고 리턴해줘서 SqlSessionFactory와 연동해주는?(잘모름) 역할을 한다면 JNDI 설정은 끝이다.

#후기

환경설정은 모든걸 적용해 놓으면 정말 쉬워보이는데, 그 내부의 작동이 돌아가는 방법을 모두 이해하고 있어야 코딩을 진행할 수 있기 때문에 정말 가성비 안나오는 작업중 하나이다 ... !!!!

 

 

728x90