Framework/Spring

[Error] Caused by: javax.naming.NameNotFoundException: Name [jdbc/ssafy]은(는) 이 컨텍스트에 바인딩되지 않았습니다. [jdbc]을(를) 찾을 수 없습니다.

잔망루피 2023. 10. 29. 23:26
반응형

🟣 에러로그

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name [jdbc/ssafy]은(는) 이 컨텍스트에 바인딩되지 않았습니다. [jdbc]을(를) 찾을 수 없습니다.

 

 

🟡 상황

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName" value="java:comp/env/jdbc/ssafy"/>
</bean>

root-context.xml에 빈을 설정했는데 jdbc/ssafy 이름으로 설정된 값을 못 찾으니까 에러가 떴다.

 

 

첫 번째 방법 - 컨텍스트 단위로 적용하기)

<properties>
	<commons-dbcp2-version>2.9.0</commons-dbcp2-version>
</properties>

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-dbcp2</artifactId>
	<version>${commons-dbcp2-version}</version>
</dependency>

pom.xml에 의존성을 추가한다.

 

src/main/webapp 아래에 META-INF를 생성 후 context.xml 파일을 추가한다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource name="jdbc/ssafy" auth="Container" type="javax.sql.DataSource" 
			maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
			username="ssafy" password="ssafy" driverClassName="com.mysql.cj.jdbc.Driver" 	
			url="jdbc:mysql://localhost:3306/ssafysample?serverTimezone=UTC&amp;useUniCode=yes&amp;characterEncoding=UTF-8"/> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

context.xml 파일을 위와 같이 작성한다.

아래 나오는 방법보다 더 권장된다.

 

 

두 번째 방법 - 모든 컨텍스트에 적용하기)

server.xml에서 맨 아래로 내린 후 Context 태그 부분을 위와 같이 수정한다.

이 방법은 한 서버의 전체 컨텍스트 모두에 적용하는 방법이라서 사실 잘 쓰는 방법이 아니다.

테스트 할 용도로 쓰는 건 괜찮다.

 

 

 


참고 👇👇👇

Commons DBCP에 대해 이해할 수 있는 좋은 글이다.

https://d2.naver.com/helloworld/5102792

 

반응형