使用hibernate無法連接數據庫的問題:
ERROR: HHH000231: Schema export unsuccessful
(Access denied for user 'root'@'192.168.1.109' (using password: NO))
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
配置如下
@Bean public DataSource dataSource(){ BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/shopping"); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUsername("root"); dataSource.setPassword(""); return dataSource; }
也就是說hiberate將localhost解析成了192.168.1.109也就是本機的ip,mysql會認為是遠程的訪問,但是mysql並沒有給這個ip配置host; 實際上mysql的配置中已經配置了localhost和127.0.0.1這樣兩種匹配方式(關掉wifi之后可以訪問mysql)那么為什么hibernate沒有將localhost解析成127.0.0.1呢?(待解決)
根據目前的理解解決方案有很多種:
1. 修改hibernate配置為
jdbc:mysql://127.0.0.1:3306/shopping
2. 修改mysql
添加一個 192.168.1.109的ip權限
3. 如何做到一次修改mysql,之后hibernate就使用localhost一直可以訪問mysql了呢?
可以建立一個中間層username.local,用來獲取當前電腦的ip(本質就是動態的配置方式),然后將host配置成usernaem.local
小結:其實這個問題本身可能不算什么,就像很多“莫名其妙”的問題一樣,對於明白的人來說是很顯然的,但是在學習新技術的時候會遇到很多類似的問題,遇到這樣的問題是不可避免的,很多時候我們就會變得盲目,不知所措,會不管三七二十一的去“百度和谷歌”上面找答案,我覺得這並不可取,應該暫時停下來,思考一下問題的來龍去脈,定義一下遇到的是哪一類問題,然后”膽大心細“的解決:大膽的猜想和wishfull thinking,同時要關注細節和細枝末節的關系,發現可能的線索,小心的求證,這才是在實踐中學習的節奏。