使用jdbc.properties配置文件配置数据库连接的时候,spring的配置文件中引用jdbc.properties,
jdbc.properties配置如下:
className=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://client.retail-download.com:9572;databaseName=prcsales_external_dev
username=prcsms_pactera
password=********
#dbcp settings
dbcp.maxIdle=50
dbcp.maxActive=20000
当查询数据库时,报如下错误:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'malone' 登录失败。 ClientConnectionId:26735a1b-968b-4567-ae11-0cc13cdd2fb9
根据错误仔细检查:数据库的用户名明明是prcsms_pactera,为什么会提示“用户 'malone' 登录失败”呢?
spring配置文件中使用jdbc.properties如下:
<description>Spring公共配置</description>
<!-- 定义受环境影响易变的变量 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="ignoreResourceNotFound" value="true"/>
<property name="locations">
<list>
<value>classpath*:/properties/jdbc.properties</value>
</list>
</property>
</bean>
<!-- 数据源配置,使用应用内的DBCP数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${className}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<!-- Connection Pooling Info -->
<property name="initialSize" value="10"/>
<property name="maxIdle" value="${dbcp.maxIdle}"/>
<property name="maxActive" value="${dbcp.maxActive}"/>
<property name="validationQuery" value="select 1"/>
<property name="testOnBorrow" value="true"/>
<property name="defaultAutoCommit" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="3600000"/>
<property name="minEvictableIdleTimeMillis" value="3600000"/>
<property name="removeAbandonedTimeout" value="120" />
<property name="removeAbandoned" value="true" />
</bean>
自己手动去创建数据库连接并操作都是正常的,为什么使用spring去创建dataSource会报错,检查了很久发现,“malone”是登陆当前windows的用户名,
仔细思考应该是这样的,${username}并没有去jdbc.properties文件中获取属性值,而是获取了windows的变量,导致获取的用户名为"malone",所以只需要改变jdbc配置文件中的属性名称即可:
className=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://client.retail-download.com:9572;databaseName=prcsales_external_dev
db_username=prcsms_pactera
password=*******
#dbcp settings
dbcp.maxIdle=50
dbcp.maxActive=20000