[Spring] Wildfly JNDI 세팅하기

unhak·2022년 10월 30일
0

Spring

목록 보기
2/3
post-thumbnail

Wildfly란?

자바를 기반으로 하는 오픈 소스 미들웨어의 총칭이다.
대표적으로 Java EE 스펙을 지원하는 JBoss Application Server가 있고 현재 40개 이상의 다양한 프로젝트가 있으며, JBoss.org 커뮤니티에 의해 개발 및 운영되고 있다.
2014년 11월 20일 레드햇은 기존 JBoss 이름을 WildFly로 변경했다.


Wildfly 세팅

standalone.xml

경로 : standalone > configuration > standalone.xml

<subsystem xmlns="urn:jboss:domain:datasources:5.0">
  <datasources>
    <datasource jndi-name="java:jboss/jdbc/postgresql/master" pool-name="postgresqlMasterPool" enabled="true" use-java-context="true">
      <connection-url>jdbc:postgresql://localhost:8080/</connection-url>
      <driver>postgresql</driver>
      <security>
        <user-name>root</user-name>
        <password>root</password>
      </security>
      <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
        <background-validation>true</background-validation>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
      </validation>
    </datasource>
    <drivers>
      <driver name="postgresql" module="org.postgresql"/>
    </drivers>
  </datasources>
</subsystem>

standalone.xml에는 datasource와 driver 정보를 세팅한다.
위에서는 jndi-name이 중요하기 때문에 주목해야 한다.

module.xml

다음으로는 module.xml 파일을 만들어줘야 하는데 처음 Wildfly를 다운받게 되면 파일이 존재하지 않을 것이다. 그렇기 때문에 폴더와 파일을 새로 만들어준다.

  1. modules 폴더 아래에 org/postgresql/main 경로를 순차적으로 만들어준다.
  2. main 폴더에 module.xml 파일을 생성한다.
  3. main 폴더에 postgresql-42.3.3.jar 파일을 위치시킨다 (DB종류에 따라 각각에 맞는 driver를 받으면 된다).
<?xml version='1.0' encoding='UTF-8'?> 
 
<module xmlns="urn:jboss:module:1.1" name="org.postgresql"> 
 
    <resources> 
    <!--the name of your driver --> 
        <resource-root path="postgresql-42.3.3.jar"/> 
    </resources> 
 
    <dependencies> 
        <module name="javax.api"/> 
        <module name="javax.transaction.api"/> 
    </dependencies> 
</module>

resource-root에 main 폴더에 있는 driver를 적어넣고 dependencies에 기본적인 api와 transaction 관련 module을 작성한다.


Spring DB 연동

Wildfly 세팅이 끝났으면 본격적으로 Spring에서 Java 설정 파일을 만들어 연동한다.

DataSourceConfig.java

@Configuration
@MapperScan(value = {"com.example.wildfly.dao.master"}, sqlSessionFactoryRef = "masterSqlSession")
@Slf4j
@EnableTransactionManagement
public class MasterDataSourceConfig {

	@Bean
	public DataSource masterDataSource() {
		JndiDataSourceLookup jdsl = new JndiDataSourceLookup();
		jdsl.setResourceRef(true);
		DataSource dataSource = jdsl.getDataSource("java:jboss/jdbc/postgresql/master");
		return dataSource;
	}

	@Bean
	public SqlSessionFactory masterSqlSession(DataSource masterDataSource) throws Exception {
		SqlSessionFactory sqlFactory = null;

		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver();
		sqlSessionFactoryBean.setDataSource(masterDataSource);

		org.apache.ibatis.session.Configuration conf = new org.apache.ibatis.session.Configuration();
		conf.setMapUnderscoreToCamelCase(true);

		sqlSessionFactoryBean.setConfiguration(conf);
		sqlSessionFactoryBean.setMapperLocations(pmrpr.getResources("classpath:/mapper/master/**/*.xml"));
		sqlFactory = sqlSessionFactoryBean.getObject();

		return sqlFactory;
	}

	@Bean
	public PlatformTransactionManager transactionManager() {
		return new DataSourceTransactionManager(masterDataSource());
	}
}

masterDataSource 메소드를 보면 jdsl.getDataSource("java:jboss/jdbc/postgresql/master") 부분이 있는데 위에 standalone.xml에서 세팅한 jndi-name을 적용하면 된다.


참고 자료

profile
slowly but steadily🐢

0개의 댓글