<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

         摘要:   閱讀全文
    posted @ 2009-06-11 21:05 旭日 閱讀(973) | 評論 (0)編輯 收藏
     



    組合:Spring+Hibernate+struts+java+jsp
    要求功能:比如又A,B,C三個數據庫,需要查詢A,B數據庫的某個數據,然后將此查詢到的數據存入C中。
    求問:此功能如何實現呢?
                小弟急要,謝謝。

    posted @ 2009-06-06 12:21 旭日 閱讀(338) | 評論 (1)編輯 收藏
     
    Spring2.0.1以后的版本已經支持配置多數據源,并且可以在運行的時候動態(tài)加載不同的數據源。通過繼承AbstractRoutingDataSource就可以實現多數據源的動態(tài)轉換。目前做的項目就是需要訪問12個數據源,每個數據源的表結構都是相同的,所以要求數據源的變動對于編碼人員來說是透明,也就是說同樣SQL語句在不同的環(huán)境下操作的數據庫是不一樣的。具體的配置如下: 
    一、首先需要寫一個靜態(tài)的鍵值對照類: 


    代碼 
    package cn.com.xinli.ccp.dynamicds; 

    public class DataSourceMap 
    public static final String Admin="Admin"
    public static final String Yxh = "Yxh"
    }
     

     

    這個類主要在使用的時候當作獲得數據源的標志使用。 
    二、建立一個獲得和設置上下文的類: 


    代碼 
    package cn.com.xinli.ccp.dynamicds; 

    public class CustomerContextHolder 
    private static final ThreadLocal contextHolder = 
    new ThreadLocal(); 

    public static void setCustomerType(String customerType) 
    contextHolder.set(customerType); 
    }
     

    public static String getCustomerType() 
    return (String) contextHolder.get(); 
    }
     

    public static void clearCustomerType() 
    contextHolder.remove(); 
    }
     

    }
     

    這個主要負責設置上下文環(huán)境和獲得上下文環(huán)境。 
    三、建立動態(tài)數據源類,這個類必須繼承AbstractRoutingDataSource: 

    代碼 
    package cn.com.xinli.ccp.dynamicds; 

    import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 

    public class DynamicDataSource extends AbstractRoutingDataSource 

    protected Object determineCurrentLookupKey() 
    // TODO Auto-generated method stub 
    return CustomerContextHolder.getCustomerType(); 
    }
     

    }
     

    這個類實現了determineCurrentLookupKey方法,該方法返回一個Object,一般是返回字符串,也可以是枚舉類型。該方法中直接使用了CustomerContextHolder.getCustomerType()方法獲得上下文環(huán)境并直接返回。
     
    四、編寫spring的配置文件配置數據源 

    代碼 
    <bean id="parentDataSource" 
    class
    ="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"> 
    <value>COM.ibm.db2.jdbc.net.DB2Driver</value> 
    </property> 
    <property name="url"> 
    <value>jdbc:db2:127.0.0.1:TEST</value> 
    </property> 
    </bean> 

    <bean id="adminDataSource" parent="parentDataSource"> 
    <property name="username" value="admin"/> 
    <property name="password" value="master997mb"/> 
    </bean> 

    <bean id="yxhDataSource" parent="parentDataSource"> 
    <property name="username" value="yxh"/> 
    <property name="password" value="yxh"/> 
    </bean> 

    在這個配置中可以看到首先有個parentDataSource,這個主要配置一些數據源的公用信息,項目中都是鏈接DB2數據庫;adminDataSource和yxhDataSource是根據不同需要配置的個性化信息,但都必須加parent屬性,值為parentDataSource。這樣就配置好了2個數據源信息。當然如果鏈接的多數據源是不同類型的兩個數據庫,那么parentDataSource就可以不要了,直接配置兩個不同的數據源鏈接就可以了。 
    五、編寫spring配置文件配置多數據源映射關系 

    代碼 
    <bean id="dataSource" class="cn.com.xinli.ccp.dynamicds.DynamicDataSource"> 
    <property name="targetDataSources"> 
    <map key-type="java.lang.String"> 
    <entry key="Yxh" value-ref="yxhDataSource"/> 
    </map> 
    </property> 
    <property name="defaultTargetDataSource" ref="adminDataSource"/> 
    </bean> 

    在這個配置中第一個property屬性配置目標數據源,
    <map key-type="java.lang.String">中的key-type必須要和靜態(tài)鍵值對照類DataSourceMap中的值的類型相同;<entry key="Yxh" value-ref="yxhDataSource"/>中key的值必須要和靜態(tài)鍵值對照類中的值相同,如果有多個值,可以配置多個<entry>標簽。第二個property屬性配置默認的數據源。 
    六、配置hibernate。 
    Hibernate的配置和普通的hibernate、spring結合的配置一樣 

    代碼 
    <bean id="sessionFactory" 
    class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <!-- to override, use the "SpringDatasourceConfig" snippet in your project --> 
    <property name="dataSource"> 
    <ref local="dataSource" /> 
    </property> 
    <property name="mappingResources"> 
    <list> 
    <value> 
    cn/com/xinli/ccp/entity/User.hbm.xml 
    </value> 
    <value> 
    cn/com/xinli/ccp/entity/Test.hbm.xml 
    </value> 
    </list> 
    </property> 
    <property name="hibernateProperties"> 
    <props> 
    <prop key="hibernate.dialect"> 
    org.hibernate.dialect.DB2Dialect 
    </prop> 

    <prop key="hibernate.show_sql">true</prop> 
    <prop key="hibernate.use_outer_join">true</prop> 
    <prop key="hibernate.jdbc.batch_size">50</prop> 
    <prop key="hibernate.jdbc.fetch_size">5</prop> 
    <prop key="hibernate.connection.pool_size">2</prop> 
    <prop key="hibernate.connection.autocommit">false</prop> 
    <prop key="hibernate.cache.use_query_cache">false</prop> 
    <prop key="hibernate.max_fetch_depth">1</prop> 
    <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop> 
    </props> 
    </property> 
    </bean> 

    <bean id="mydao" class="cn.com.xinli.ccp.dao.HibernateBaseDao"> 
    <property name="sessionFactory"> 
    <ref local="sessionFactory" /> 
    </property> 
    </bean> 

    關于dao的代碼這里就省略了。 
    七、配置結束,可以使用了。 
    代碼 
    public class DaoTest extends TestCase 

    public void testSave() throws Exception
    CustomerContextHolder.setCustomerType(DataSourceMap.Admin);
    //設置數據源 
    //hibernate創(chuàng)建實體 
    Test test = new Test(); 
    test.setTest(
    "22222222"); 

    mydao.save(test);
    //使用dao保存實體 

    CustomerContextHolder.setCustomerType(DataSourceMap.Yxh);
    //設置為另一個數據源 

    mydao.save(test);
    //使用dao保存實體到另一個庫中 

    }
     
    }
     
    在項目中對于編碼人員對多數據源的切換可以做成透明的,操作同樣的dao,就可以訪問不同的數據庫了


    posted @ 2009-05-30 21:36 旭日 閱讀(425) | 評論 (1)編輯 收藏
     
         摘要: 多數 java 程序員都非常清楚使用 jar 文件將組成 java 解決方案的各種資源(即 .class 文件、聲音和圖像)打包的優(yōu)點。剛開始使用 jar 文件的人常問的一個問題是:“如何從 jar 文件中提取圖像呢?”本文將回答這個問題,并會提供一個類,...  閱讀全文
    posted @ 2009-05-30 21:27 旭日 閱讀(241) | 評論 (2)編輯 收藏
     
    今天整合SSH,出現了這個問題Context initialization failed,很是郁悶。

    ERROR [org.springframework.web.struts.ContextLoaderPlugIn] - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 
    'headsService' defined in ServletContext resource [/WEB-INF/classes/applicationContext-heads.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'hDao' of bean class [com.forestryInfo.biz.impl.HeadsBizImpl]: No property 'hDao' found
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
    478)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$
    1.run(AbstractAutowireCapableBeanFactory.java:409)
     at java.security.AccessController.doPrivileged(Native Method)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
    380)
     at org.springframework.beans.factory.support.AbstractBeanFactory$
    1.getObject(AbstractBeanFactory.java:264)
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
    220)
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
    261)
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
    185)
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
    164)
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:
    429)
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:
    729)
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
    381)
     at org.springframework.web.struts.ContextLoaderPlugIn.createWebApplicationContext(ContextLoaderPlugIn.java:
    354)
     at org.springframework.web.struts.ContextLoaderPlugIn.initWebApplicationContext(ContextLoaderPlugIn.java:
    295)
     at org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:
    225)
     at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:
    869)
     at org.apache.struts.action.ActionServlet.init(ActionServlet.java:
    336)
     at javax.servlet.GenericServlet.init(GenericServlet.java:
    212)
     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:
    1139)
     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:
    966)
     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:
    3956)
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:
    4230)
     at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:
    1116)
     at org.apache.catalina.startup.HostConfig.check(HostConfig.java:
    1214)
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:
    293)
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:
    120)
     at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:
    1306)
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:
    1570)
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:
    1579)
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:
    1559)
     at java.lang.Thread.run(Thread.java:
    619)
    Caused by: org.springframework.beans.InvalidPropertyException: Invalid property 
    'hDao' of bean class [com.forestryInfo.biz.impl.HeadsBizImpl]: No property 'hDao' found
     at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:
    382)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:
    1287)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:
    1248)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:
    1008)
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
    470


    這里主要提示:
    Error creating bean with name 'headsService' defined in ServletContext resource [/WEB-INF/classes/applicationContext-heads.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'hDao' of bean class 



    我找了好久錯誤的原因,但都沒有找到。
    后面,我干脆講“hDao”改為“dao”,整個程序就能運行起來了。
    很是無奈,想了好久還是想不明白。
    posted @ 2009-05-29 16:50 旭日 閱讀(6517) | 評論 (2)編輯 收藏
     
    public class ploytest {

    public static void main(String[] args) {
    A a = new A();
    B b = new B();
    a.s = "[AA]";
    b.s = "[BB]";
    a = b;
    System.out.println(a.s);
    System.out.println(b.s);
    System.out.println(a.getS());
    System.out.println(b.getS());
    System.out.println("====================");
    ((A)b).s = "[AA]";
    System.out.println(a.s);
    System.out.println(b.s);
    System.out.println(a.getS());
    System.out.println(b.getS());
    }
    }

    class A {
    String s = "[A]";
    String getS() {
    return s;
    }
    }

    class B extends A{
    String s = "";
    String getS() {
    return s;
    }
    }
    The results:
    [A]
    [BB]
    [BB]
    [BB]
    ====================
    [AA]
    [BB]
    [BB]
    [BB]
    其實結果不重要。一運行就知道。主要是原理。
    將子類對象賦值給父類對象,所得到對象是這樣的一個對象:
    它是一個編譯是為父類對象,但運行卻是一個子類對象,具體特征如下.
    1.被聲明為父類對象
    2.擁有父類屬性
    3.占用子類的內存空間
    4.子類方法覆蓋父類的方法時,此時對象調用的是子類的方法;否則,自動調用繼承父類的方法.
    5.我人認為這個對象既不是父類對象,也不是子類對象.當我們用到它的方法時,
    我便把它看成子類對象;若用到它的屬性時,我把它看成父類對象.
    它是一個占用父類屬性,而使用子類方法的對象.至于到底是什么對象,我認為還是得根據聲明來,它應算是父類對象,但擁有子類方法.
    這就是為什么第一個a.s為[A]的道理了。
    (A)b是向上轉型。(A)b.s相當于把"[AA]"賦值給b的父類對象。所以由上面可以看出。a.s為[AA]而其他的都同上
     
    System.out.println(a.getS()); System.out.println(b.getS()); 再看這條語句: a.s = "[AA]"; //這是給對象a中s賦值,跟上轉型.s一點關系都沒有,不要被弄混,緊記這里面有3個對象,你就會明白的
     
    看了前幾個留言怎么也沒看出來為什么"第一個a.s為[A]的道理". 依我看,這題有三個對象,希望提問者不要弄混. 這三個對象分別是a,b,b的上轉型對象, a = b; //自這條語句以下,a便不是a對象,而是b的上轉型對象 System.out.println(a.s); System.out.println(b.s);
    關鍵還是a = b; 這句話,其相當于a =(A) b; 所以第一句打印的是[A] 而非[AA]
    posted @ 2009-04-24 15:55 旭日 閱讀(558) | 評論 (0)編輯 收藏
    僅列出標題
    共2頁: 上一頁 1 2 
     
    主站蜘蛛池模板: 亚洲大香人伊一本线| 亚洲成a人片在线不卡一二三区 | 相泽亚洲一区中文字幕| 国产拍拍拍无码视频免费| 亚洲一卡2卡4卡5卡6卡残暴在线| 性xxxx视频播放免费| 一个人看的www在线免费视频 | 亚洲最大的成人网站| 亚洲国产香蕉人人爽成AV片久久| 日本免费大黄在线观看| 亚洲精品国产suv一区88| 亚洲熟女少妇一区二区| 噼里啪啦电影在线观看免费高清| 特级毛片在线大全免费播放| 亚洲黄色中文字幕| 亚洲免费在线观看| 97无码免费人妻超级碰碰夜夜| 中国国产高清免费av片| 亚洲熟女乱色一区二区三区| 亚洲VA中文字幕不卡无码| 日本无卡码免费一区二区三区| 久久精品无码精品免费专区| 久久综合亚洲色hezyo| 亚洲精品国产成人| 国产亚洲精品自在久久| 国产成人精品免费视频软件| 6080午夜一级毛片免费看6080夜福利 | 成人免费毛片内射美女APP| 91国内免费在线视频| 亚洲人成色在线观看| 久久精品a亚洲国产v高清不卡| 亚洲精品成人在线| 免费无码一区二区三区蜜桃大| 久久99国产乱子伦精品免费| 一级毛片无遮挡免费全部| 亚洲AV无码一区二区乱子仑| 亚洲免费一级视频| 亚洲高清资源在线观看| 亚洲爆乳无码一区二区三区| 久久亚洲欧洲国产综合| 免费观看国产精品|