在Spring开发中,使用注解配置时,使用${usernaame}获取的为Windows用户名,而不是数据库的用户名。
- 在jdbcConfig.properties文件中配置的数据源
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/eesy
username=root
password=root
- spring数据库相关的配置类
public class JdbcConfig {
@Value("${driver}")
private String DRIVER;
@Value("${url}")
private String URL;
@Value("${username}")
private String USERNAME;
@Value("${password}")
private String PASSWORD;
/**
* 用于创建一个QueryRunner对象
* @param dataSource
* @return
*/
@Bean(name = "runner")
@Scope("prototype")
public QueryRunner createQueryRunner(DataSource dataSource){
return new QueryRunner(dataSource);
}
/**
* 创建数据源对象
* @return
*/
@Bean(name = "dataSource")
public DataSource createDataSource(){
ComboPooledDataSource ds = new ComboPooledDataSource();
try {
ds.setDriverClass(DRIVER);
ds.setJdbcUrl(URL);
ds.setUser(USERNAME);
ds.setPassword(PASSWORD);
return ds;
} catch (PropertyVetoException e) {
throw new RuntimeException(e);
}
}
}
- 执行测试类时,发现控制台报一下错误
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run
警告: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@50492997 -- 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 'Mr.Ye'@'localhost' (using password: YES)
(上述‘Mr.Ye’为主机名,一般为administrator)
原因:在XML中获取用户名使用 ${username}获取的是计算机的账号名称,一般电脑账号为administrator。
解决:可以使用唯一识别的名称进行连接,比如${jdbc.username}或 ${user}再次测试,成功连接。