Spring에서 JNDI설정(hikaricp)
스프링에서 jndi를 통해 mysql과 연결하자.
1. 해당 라이브러리를 tomcat/lib에 넣어준다.
- mysql-connector-java-5.1.34.jar
- slf4j-api-1.6.6.jar
- HikariCP-2.6.0.jar
2. Tomcat의 Server.xml에 추가
hikari
를 이용하자.
<GlobalNamingResources>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
<Resource name="jdbc/testdb" auth="Container"
factory="com.zaxxer.hikari.HikariJNDIFactory"
type="javax.sql.DataSource"
minimumIdle="5"
maximumPoolSize="10"
connectionTimeout="300000"
driverClassName="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://127.0.0.1:3306/test_db"
username="root"
password="1234"
/>
</GlobalNamingResources>
3. Tomcat의 Context.xml에 추가
<Context>
<ResourceLink global="jdbc/testdb" name="jdbc/testdb" type="javax.sql.DataSource"/>
</Context>
4. Spring Project에서 Bean 추가
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/testdb</value>
</property>
</bean>
5. Spring Project의 web.xml에 추가
<!-- JNDI 설정 -->
<resource-ref>
<description>test</description>
<res-ref-name>jdbc/testdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
출처:http://yookeun.github.io/java/2017/04/14/spring-jndi/
테스트 환경
OS : Windows10 64bit
이클립스 : egovframe 3.2
Was : Tomcat7
Database : MariaDB
소스 배포를 위해 리눅스 서버에서 톰캣 설정만 며칠 째 삽질중..
로컬에서는 실행이 잘 되는데 서버에서는..
로컬에서도 JNDI를 사용하고 있지만 tomcat에 직접 설정하지 않았다.
테스트를 위해 tomcat에 JNDI를 설정해보고 과정을 기록한다.
1. 메이븐을 이용해서 mariadb 커넥터를 내려받는다.
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>1.1.8</version>
</dependency>
2. mariadb-java-client-1.1.8.jar 파일을 %CATALINA_HOME%\lib에 복사한다. (톰캣 설치 폴더 아래 lib)
- maven, tomcat7 lib에 둘다 있어도 상관없는듯..
3. %CATALINA_HOME%\conf\server.xml 아래 내용 입력
<GlobalNamingResources>
<Resource name="jdbc/testdb"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="test"
password="1234"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mysql://xxx.xxx.xxx.xxx:3306/testdb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
/>
</GlobalNamingResources>
4. Spring - webapp/META-INF/context.xml 아래 내용 입력
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<ResourceLink global="jdbc/testdb" name="jdbc/testdb" type="javax.sql.DataSource"/>
</Context>
5. Spring - webapp/WEB-INF/web.xml 아래 내용 입력
<web-app>
...
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/testdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...
</web-app>
6. Spring - WEB-INF/설정파일 경로/database.xml 아래 내용 입력
<beans>
...
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/testdb"/>
<property name="resourceRef" value="true" />
</bean>
...
</beans>
7. 이클립스 톰캣 재시작 후 db연결이 잘되는지 확인
출처: http://jlblog.me/74 [JLBlog]
'IT > Spring' 카테고리의 다른 글
RESTful API 에러 처리 팁 (0) | 2018.02.06 |
---|---|
스프링 시큐리티-로그아웃 (0) | 2018.01.31 |
[SPRING,JAVA] 프레임워크에 Ajax사용을 위한 JsonView 설정하기, Spring Framework JsonView Ajax Sample (0) | 2018.01.30 |
Restful 이란 무엇인가 (0) | 2018.01.19 |
스프링(Spring) MVC 프레임워크(Model View Controller Framework) (1) | 2018.01.12 |