提高Hibernate 3 啟動速度
在Tomcat5.5.x環境下,呼叫Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。
推薦你只是在開發階段採用這樣的方式載入,最後的產品釋出階段你仍需使用經典的Hibernate.cfg.xml檔案,通過Tomcat的ServletContextListener API在應用程式部署的時候建立Hibernate SessionFactory,而不是在程式第一次呼叫Hiberante的時候。
檔案:
net/netbauds/catalina/IHibernateCachableFileLoad.java
這個檔案可以在不同的web應用中使用而不用作任何修改。
package net.netbauds.catalina;
import org.hibernate.cfg.Configuration;
public interface IHibernateCachableFileLoad {
public void addMappings(Configuration conf);
}
net/netbauds/catalina/HibernateSessionFactory.java
使用靜態方法HibernateSessionFactory.getSessionFactory() 來代替我們以前使用的Configuration().configure().buildSessionFactory(),這個方法一般在你的HibernateSession單態類中(參考
這個檔案也可以在不同的應用中使用而不加任何修改:
package net.netbauds.catalina;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
// 單態的 sessionFactory
public class HibernateSessionFactory {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
// 不要從 JNDI中獲取SessionFactory, 使用一個靜態的 SessionFactory
if (sessionFactory == null ) {
Configuration conf = new Configuration();
try {
Class klass = Class.forName( " config.HibernateCachableFileLoad " );
IHibernateCachableFileLoad hibConf = (IHibernateCachableFileLoad) klass.newInstance();
hibConf.addMappings(conf);
} catch (ClassNotFoundException e) {
// NOOP
} catch (InstantiationException e) {
// NOOP
} catch (IllegalAccessException e) {
// NOOP
}
Configuration confdone = conf.configure();
if (confdone != null ) {
// Use default hibernate.cfg.xml
sessionFactory = confdone.buildSessionFactory();
}
}
return sessionFactory;
}
}
config/HibernateCachableFileLoad.java
這個檔案是隨web應用的不同而不同的,你需要修改程式碼中的某些部分使其適合你的應用。應該有人知道如何更容易的由class loader獲得WEB-INF/classes的絕對路徑吧,這裡我只是把它直接寫入了程式中。
你需要修改如下部分:
* 將你所有的Hibernate對映配置檔案(*.hbm.xml)加入到程式中(正如你在Hibernate.cfg.xml中所做的)。
package config;
import net.netbauds.catalina.IHibernateCachableFileLoad;
import org.hibernate.cfg.Configuration;
// This class is webapp specific and allow loading of mapping via
// addCachableFile();
public class HibernateCachableFileLoad implements IHibernateCachableFileLoad {
public void addMappings(Configuration conf) {
doFile(conf, " com/mydomain/MyClassFile001.hbm.xml " );
doFile(conf, " com/mydomain/MyClassFile002.hbm.xml " );
}
private void doFile(Configuration conf, String resPath) {
String path = null ;
URL u = this .getClass().getClassLoader().getResource(resPath);
if (u != null ) {
path = u.getFile();
if (path != null )
conf = conf.addCacheableFile(path);
}
if (path == null || conf == null )
System.err.println( " ERROR: Failed to load: " + resPath);
}
}
hibernate.cfg.xml
這將使我們標準的hibernate.cfg.xml發生一些變化。如果你使用的是hibernate-configuration-3.0.dtd(3.0版本),那麼你可以不寫入任何mapping元素。
如果你使用的是老版本的dtd,那麼你需要在hibernate.cfg.xml中寫入一個mapping元素。
An alternative way maybe to programatically configure the connection.datasource in the HibernateSessionFactory() above and maybe hibernate will allow you to do away with looking and parsing the hibernate.cfg.xml completely and build a working factory with the Configuration you have programatically created.一個可供選擇的方法是使用編寫java程式碼的方式來配置上面的SessionFactory的connection.datasource,也許Hibernate將允許你讀取hibernate.cfg.xml檔案並且是用你在程式中建立的Configuration來建立一個sessionFactory。
你需要作如下修改:
* 將 java:comp/env/jdbc/ConfigureMeDS 修改為你自己的資料庫連線資訊
那麼現在:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/jdbc/ConfigureMeDS</property>
<!-- Mapping files -->
<!-- <mapping resource="uk/mydomain/Dummy.hbm.xml"/> -->
</session-factory>
</hibernate-configuration>
如果你使用的Hibernate版本需要在hibernate.cfg.xml中至少有一個mapping元素,那麼你可能需要用到下面的兩個檔案,否則,如上就可以了。
uk/mydomain/Dummy.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="uk.mydomain.Dummy" table="dummy">
<id name="id" type="long" column="id">
<generator class="native" />
</id>
</class>
</hibernate-mapping>
uk/mydomain/Dummy.java
package uk.mydomain;
public class Dummy {
private long id;
private long getId() {
return id;
}
private void setId(long id) {
this.id = id;
}
}
相關推薦
提高Hibernate 3 啟動速度
在Tomcat5.5.x環境下,呼叫Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。 推薦你只是在開發階段採用這樣的方式載入,最後的產品釋出階段你仍需使用經典的Hibern
如何提高Hibernate 3 啟動速度
在Tomcat5.5.x環境下,呼叫Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。 推薦你只是在開發階段採用這樣的方式載入,最後的產品釋出階段你仍需使用經典的Hib
怎樣提高Windows系統的啟動速度
Windows10系統由於加入了“快速啟動”機制,所以啟動速度在所有Windows版本中是最快的。但是隨著使用時間的增加,安裝的程式的增多,啟動速度就會逐漸減慢。通過下面的方法可以有效提高Windows 10的啟動速度,這些方法也可以用在Windows xp/vista/7/8/8.1 &n
android開發之提高應用啟動速度_splash頁面瞬間響應_避免APP啟動閃白屏
Application和Activity中的onCreate都進行了優化,基本沒有耗時操作,但是啟動應用之後還是會閃現一下白色背景,然後才進入Splash頁面,對比了一下QQ、微信、微博等客戶端,點選之後都是瞬間響應Splash啟動頁,差別在哪裡呢。其實就算你onCreate
3.修改更新源sources.list,提高軟體下載安裝速度(2017.04.05)
2017年4月5日再次更新源 1.切換到root使用者(如果已經是root使用者就直接看第二步) [email protected]:~$ su 密碼: 2.用文字編輯器開啟sources.list,手動新增下面的更新源 [email protected]:/ho
Android提高啟動速度的實現方法
原文地址:http://www.eoeandroid.com/thread-29953-1-1.html Android重量級開發之--提高android啟動速度研究 大家都知道啟動速度慢是智慧作業系統的一個通病,Android也不例外,啟
如何優化提高tomcat啟動速度
在tomcat啟動的時候,我們可以做一些優化設定來使得tomcat的啟動更快速,下面是一些常見的優化加速啟動的方法建議(以tomcat-7.+為例說明)。 1、 Jars包 1.1、將一些不必要的jar包去掉,當tomcat啟動載入jar包的時候,會去搜尋每個jar
android 提高App啟動速度
公司的App啟動速度太慢了要求提高啟動速度, 於是動手研究下 把啟動速度從2000ms降低到800ms左右。 先記錄下提速的方法 application的Oncreate方法裡面的邏輯程式碼全用 new Handler().post(new Runnable(
提升HTML5的性能體驗系列之五 webview啟動速度優化及事件順序解析
執行時間 很快 runt 代碼 模式 本地 技術 apk loaded webview加載時有5個事件。觸發順序為loading、titleUpdate、rendering、rendered、loaded。webview開始載入頁面時觸發loading,載入過程中如果&am
IntelliJ IDEA 提高執行代碼速度的好辦法
找到 pil clip 代碼 eclips compiler 技術 分享 image idea是神器,用過後再也不想回到eclipse去了,但是有一點不明白,為什麽運行速度這麽慢 後面慢慢發現原來是每次執行前都需要build,即編譯,所以就是這個編譯時間讓運行速度顯
Entity Framework的啟動速度優化
映射 自帶 1-1 man 同時 找到 優化 http target 剛開始的時候沒有太在意,但是隨著系統的發布,這種初次請求,或者閑置若幹時間後第一次請求的漫長等待使得App的體驗很差,很多時候App加載好半天數據都沒過來。如果前端沒處理好,還會導致App的假死。所以就花
加快liferay 7的啟動速度
logs ati highlight groovy log roo 開啟 ext 特性 在啟動Liferay的過程中,你會發現在某個時刻,會特別慢,停留了很久,它是停在validate LPKGs,檢驗LPKG files是否被篡改,這個過程在開發的過程中十分令人頭疼。 現
Web前端性能優化——如何提高頁面加載速度
get請求 防止 元素 加載 支持 htm 範圍 個人 另一個 前言: 在同樣的網絡環境下,兩個同樣能滿足你的需求的網站,一個“Duang”的一下就加載出來了,一個糾結了半天才出來,你會選擇哪個?研究表明:用戶最滿意的打開網頁時間是2-5秒,如果等待超過10秒,99%的用戶
Hosts文件實際應用 配置內部服務器提高訪問效率和速度
數據 basic 之前 很大的 應用 image 部署 cloud 積累 一 hosts文件的作用和介紹 https://jingyan.baidu.com/article/335530da45485e19cb41c3d6.html https://www.cnblogs.
三個線程互相通信 線程1啟動線程2 2啟動3 3啟動1
condition com mic ace atom should except int rri package cn.itcast.heima2; import java.util.concurrent.atomic.AtomicInteger; import java.
提高VS2010/VS2012編譯速度
process 情況下 conf lds 需要 全局參數 -h link 圖片 轉 https://blog.csdn.net/liaowenfeng/article/details/75464657 http://blog.csdn.net/mythma/ar
一組相關聯的問題:“sudo: unable to resolve host ###: Connection timed out”、軟件啟動速度超慢、IPv6無法使用
acs sts 原因 命令 最終 hostname med 出現 connect 近日陸續發現計算機出現幾個問題,最終發現這些問題實際上是由同一個原因導致的 問題1:無法使用IPv6 問題2:無論是啟動Emacs GUI還是在命令行中執行emacs -nw指令,打開Emac
MySQL之按月拆分主表並按月分表寫入數據提高數據查詢速度
tom auto begin rda rim 日期 pre tran create 使用場景: 主表數據量特別大,為了提高查詢的速度,可以考慮按月進行分表,要求就是當月的數據到當月表查詢,上月的數據到上月表查詢,當天的數據到主表來查詢。這樣在一定程度上也是提高了數據的查詢速
首次啟動速度慢的問題記錄IIS性能優化
nec nta iis7 服務 www 完成 更新 服務器 程序 ASP.NET網站發布的時候需要預編譯.這樣不但能解決首次速度慢的問題,還能把cshtml的內容編譯.這樣別人就看不到我們VIEW的代碼了.那麽打開VS. 發布的時候把"在發布期間預編譯"打鉤,點擊後
c理解提高(3)程式的記憶體四區模型和函式呼叫模型
程式的記憶體四區模型 記憶體四區的建立流程 流程說明 1、作業系統把物理硬碟程式碼load到記憶體 2、作業系統把c程式碼分成四個區 3、作業系統找到main函式入口執行 各區元素分析 函式呼叫模型 基本原理