[Spring] Spring JDBC 연결 이 안 되 는 문제 해결

Spring JDBC 를 공부 하 는 과정 에서 다음 과 같은 문제 가 발생 했다.설명 은 다음 과 같 습 니 다.
test 데이터베이스 와 information 에 연결 할 수 있 습 니 다.schema 데이터베이스 (test 와 information schema 데이터 베 이 스 는 MySQL 설치 후 자체 에 있 는 데이터베이스) 이지 만 자체 create 데이터 베 이 스 를 연결 할 수 없습니다.테스트 프로 세 스 오류 정보 표시:
  : com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@4b76c591 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
java.sql.SQLException: Access denied for user 'arthur'@'localhost' (using password: YES)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:911)
	at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3953)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1276)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2048)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:723)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
	at sun.reflect.GeneratedConstructorAccessor7.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
	at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
	at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
	at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
	at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
	at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

이 오류 가 발생 한 원인: 계 정 비밀번호 문제!하지만 주의!!연결 가능
test 데이터베이스.
나중에 필 자 는 테스트 를 통 해 비밀번호 가 비어 있 으 면 임의의 문자열 의 계 정 이 test 데이터 베 이 스 를 방문 할 수 있다 는 것 을 알 게 되 었 다. 필 자 는 이것 이 MySQL 이 좋 지 않 은 곳 이 라 고 생각 하고 참고 만 할 수 있다 (test 데이터 베 이 스 를 이렇게 설정 한 이 유 를 이해 할 수 없 기 때문이다).
필자 가 데이터 베 이 스 를 연결 하 는 것 은 c3p 0 연결 탱크 방식 을 사용 하 는데 여기에 치 명 적 인 오류 가 있다.다음 과 같다.
c3p 0 을 설정 한 bean 입 니 다.
<!--   c3p0    -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="user" value="${user}"></property>
		<property name="password" value="${password}"></property> 
		<property name="jdbcUrl" value="${JdbcUrl}"></property>
		<property name="driverClass" value="${driverClass}"></property>
		<property name="numHelperThreads" value="10"></property>
			<property name="initialPoolSize" value="${initPoolSize}"></property>
		<property name="maxPoolSize" value="${maxPoolSize}"></property>
	</bean>

치 명 적 인 잘못 은
<property name="user" value="${user}"></property>
value = "${user}", 주의!!!여기 user 못 써!!!... 로 바꾸다
<property name="user" value="${username}"></property>
문제 해결, 성공 적 인 연결.
종합 적 으로 이 문제 가 발생 하 는 이 유 는 변수 이름 이 시스템 이나 프레임 워 크 의 변수 와 충돌 할 수 있 기 때문이다.따라서 이름 을 지 을 때 충돌 할 수 있 는 이름 을 사용 하지 마 세 요.

좋은 웹페이지 즐겨찾기