🟣 에러로그
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&useUniCode=yes&characterEncoding=UTF-8"/>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
context.xml 파일을 위와 같이 작성한다.
아래 나오는 방법보다 더 권장된다.
두 번째 방법 - 모든 컨텍스트에 적용하기)
server.xml에서 맨 아래로 내린 후 Context 태그 부분을 위와 같이 수정한다.
이 방법은 한 서버의 전체 컨텍스트 모두에 적용하는 방법이라서 사실 잘 쓰는 방법이 아니다.
테스트 할 용도로 쓰는 건 괜찮다.
참고 👇👇👇
Commons DBCP에 대해 이해할 수 있는 좋은 글이다.
https://d2.naver.com/helloworld/5102792
반응형
'Framework > Spring' 카테고리의 다른 글
TypeError: Failed to execute 'fetch' on 'Window' : Request with GET/HEAD method cannot have body. (0) | 2024.04.26 |
---|