hibernate...TableMetadata加載東西慢怎麼辦?

現象

啓動org.hibernate.tool.hbm2ddl.TableMetadata 一直在家在什麼東西,特別浪費時間,日誌如下:

09:54:39  org.hibernate.tool.hbm2ddl.TableMetadata table found: P2PDB.LOGIN
, 09:54:39  org.hibernate.tool.hbm2ddl.TableMetadata columns: [username, password]
, 09:54:39  org.hibernate.tool.hbm2ddl.TableMetadata foreign keys: []
, 09:54:39  org.hibernate.tool.hbm2ddl.TableMetadata indexes: [sys_c0013515]
, 09:54:53  org.hibernate.tool.hbm2ddl.TableMetadata table found: P2PDB.NEWMEDIALOGIN
, 09:54:53  org.hibernate.tool.hbm2ddl.TableMetadata columns: [username, email, state, type, password]
, 09:54:53  org.hibernate.tool.hbm2ddl.TableMetadata foreign keys: []
, 09:54:53  org.hibernate.tool.hbm2ddl.TableMetadata indexes: [sys_c0029664]
, 09:56:53  org.hibernate.tool.hbm2ddl.TableMetadata table found: P2PDB.NEWS_INFO
, 09:56:53  org.hibernate.tool.hbm2ddl.TableMetadata columns: [site, fetchtime, keywords, updatetime, pubdate, plate, url, pubtime, content, contenthtml, title, source, commentshow, commenttotal]
, 09:56:53  org.hibernate.tool.hbm2ddl.TableMetadata foreign keys: []
, 09:56:53  org.hibernate.tool.hbm2ddl.TableMetadata indexes: [news_info_index, news_info_primary]
, 09:57:08  org.hibernate.tool.hbm2ddl.TableMetadata table found: P2PDB.QZONE_STATISTICS_AGE
, 09:57:08  org.hibernate.tool.hbm2ddl.TableMetadata columns: [createtime, id, numbers, age]
, 09:57:08  org.hibernate.tool.hbm2ddl.TableMetadata foreign keys: []
, 09:57:08  org.hibernate.tool.hbm2ddl.TableMetadata indexes: []
, 09:57:24  org.hibernate.tool.hbm2ddl.TableMetadata table found: P2PDB.QZONE_STATISTICS_CAREER
, 09:57:24  org.hibernate.tool.hbm2ddl.TableMetadata columns: [createtime, id, numbers, career]
, 09:57:24  org.hibernate.tool.hbm2ddl.TableMetadata foreign keys: []
, 09:57:24  org.hibernate.tool.hbm2ddl.TableMetadata indexes: [sys_c0029421]
, 09:57:38  org.hibernate.tool.hbm2ddl.TableMetadata table found: P2PDB.QZONE_STATISTICS_GENDER
, 09:57:38  org.hibernate.tool.hbm2ddl.TableMetadata columns: [createtime, id, numbers, gender]
, 09:57:38  org.hibernate.tool.hbm2ddl.TableMetadata foreign keys: []
, 09:57:38  org.hibernate.tool.hbm2ddl.TableMetadata indexes: [sys_c0029

分析
hibernate配置文件中是否有
<property name="hibernate.hbm2ddl.auto">update</property> 這個配置
其它幾個參數的意思:

  • validate 加載hibernate時,驗證創建數據庫表結構
  • create 每次加載hibernate,重新創建數據庫表結構
  • create-drop 加載hibernate時創建,退出是刪除表結構
  • update 加載hibernate自動更新數據庫結構

感覺你在啓動時,去創建或者更新了數據庫中的表而導致啓動時間很長。
如果有,把這行配置去掉試試。

總結:

  • create:表示啓動的時候先drop,再create

  • create-drop: 也表示創建,只不過再系統關閉前執行一下drop

  • update: 這個操作啓動的時候會去檢查schema是否一致,如果不一致會做scheme更新
  • validate: 啓動時驗證現有schema與你配置的hibernate是否一致,如果不一致就拋出異常,並不做更新

在本機開發調試初始化數據的時候可以選擇create、update等。

但是網站發佈正式版本的時候,對數據庫現有的數據或表結構進行自動的更新是很危險的。此時此刻應該由DBA同志通過手工的方式進行後臺的數據庫操作。

hibernate.hbm2ddl.auto的值建議是“none”或“validate”。“validate”應該是最好的選擇:這樣 spring在加載之初,如果model層和數據庫表結構不同,就會報錯,這樣有助於技術運維預先發現問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章