Spring中连接数据库,使用${username}获取不到数据库用户名

在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}再次测试,成功连接。

发布了9 篇原创文章 · 获赞 1 · 访问量 277

猜你喜欢

转载自blog.csdn.net/qq_41460383/article/details/104361410