最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑

 更新時(shí)間:2016年06月24日 11:27:27   作者:永志  
這篇文章主要介紹了Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

背景

  最近項(xiàng)目要上線,需要開(kāi)發(fā)一個(gè)數(shù)據(jù)遷移程序。程序的主要功能就是將一個(gè)數(shù)據(jù)庫(kù)里的數(shù)據(jù),查詢出來(lái)經(jīng)過(guò)一系列處理后導(dǎo)入另一個(gè)數(shù)據(jù)庫(kù)??紤]到開(kāi)發(fā)的方便快捷。自然想到用spring和mybatis整合一下。甚至用mybatis的自動(dòng)代碼生成,可以省下大量dao層的開(kāi)發(fā)。

整合的坑

之前的項(xiàng)目:以前也有過(guò)這種類(lèi)似的程序,就把spring和mybatis整合的配置直接拿來(lái)修改下用。之前的整合配置是這樣子的:

   1、考慮到數(shù)據(jù)庫(kù)url、用戶名密碼的可配置性,將這些信息放入properties文件。在spring配置文件里使用了

  <context:property-placeholder location="classpath:config.properties" />

    2、在spring配置文件里的mybatis和spring的整合配置是這樣

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lagou.chat.record.transfer.dao" />
</bean> 

  以上配置是沒(méi)有問(wèn)題的。所以就直接將配置拷貝到新項(xiàng)目

 當(dāng)前項(xiàng)目:將老項(xiàng)目的配置拷貝過(guò)來(lái),但是新的項(xiàng)目要連接兩個(gè)數(shù)據(jù)庫(kù),自然需要兩個(gè)數(shù)據(jù)源(record和im),就對(duì)老的配置做了如下修改

    1、使用properties文件的配置不變

    2、之前因?yàn)榫鸵粋€(gè)數(shù)據(jù)源(一個(gè)sqlSessionFactory),所以沒(méi)有在MapperScannerConfigurer下配置<property name="sqlSessionFactory" ref="sqlSessionFactory"/>。因?yàn)槟J(rèn)使用sqlSessionFactory。但現(xiàn)在兩個(gè)數(shù)據(jù)源了,不指定肯定導(dǎo)致混亂。所以配置修改為如下

<bean id="record_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="record_dataSource" />
</bean>
<bean id="config1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.record.dao" />
<property name="sqlSessionFactory" ref="record_sqlSessionFactory"/>
</bean> 
<bean id="im_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="im_dataSource" />
</bean>
<bean id="config2" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.im.dao" />
<property name="sqlSessionFactory" ref="im_sqlSessionFactory"/>
</bean> 

  結(jié)果就是運(yùn)行新項(xiàng)目時(shí),spring配置文件里的${jdbc.url},${jdbc.name}等屬性無(wú)法被properties里的指定值替換。一開(kāi)始自然想不到是因?yàn)閟pring和mybatis整合的原因,所以一度不斷檢查spring配置文件是否有誤,properties文件是否有誤,是不是properties文件沒(méi)被引用到或者properties文件沒(méi)有被編譯到classpath目錄下等。當(dāng)然,分析沒(méi)有分析出問(wèn)題的原因,自然就不可能找到解決問(wèn)題的辦法。只好求助于網(wǎng)絡(luò)。最終還是找到了答案

  修正方式:將配置需改為如下,問(wèn)題得到了解決:

<bean id="record_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="record_dataSource" />
</bean>
<bean id="config1" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.record.dao" />
<property name="sqlSessionFactoryBeanName" value="record_sqlSessionFactory"/>
</bean> 
<bean id="im_sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="im_dataSource" />
</bean>
<bean id="config2" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.util.rollback.im.dao" />
<property name="sqlSessionFactoryBeanName" value="im_sqlSessionFactory"/>
</bean> 

  就是將sqlSessionFactory屬性改為sqlSessionFactoryBeanName。當(dāng)然也得將ref改為value。因?yàn)閟qlSessionFactoryBeanName屬性是字符串類(lèi)型

原因

  spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 進(jìn)行自動(dòng)掃描的時(shí)候,設(shè)置了sqlSessionFactory 的話,可能會(huì)導(dǎo)致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}這樣之類(lèi)的表達(dá)式,將無(wú)法獲取到properties文件里的內(nèi)容。

  導(dǎo)致這一原因是因?yàn)?,MapperScannerConigurer實(shí)際是在解析加載bean定義階段的,這個(gè)時(shí)候要是設(shè)置sqlSessionFactory的話,會(huì)導(dǎo)致提前初始化一些類(lèi),這個(gè)時(shí)候,PropertyPlaceholderConfigurer還沒(méi)來(lái)得及替換定義中的變量,導(dǎo)致把表達(dá)式當(dāng)作字符串復(fù)制了。 但如果不設(shè)置sqlSessionFactory 屬性的話,就必須要保證sessionFactory在spring中名稱(chēng)一定要是sqlSessionFactory ,否則就無(wú)法自動(dòng)注入。

以上所述是小編給大家介紹的Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解 Java靜態(tài)代理

    詳解 Java靜態(tài)代理

    這篇文章主要介紹了 Java靜態(tài)代理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java代理的知識(shí),感興趣的朋友可以了解下
    2020-08-08
  • Java 覆蓋equals時(shí)總要覆蓋hashcode

    Java 覆蓋equals時(shí)總要覆蓋hashcode

    這篇文章主要介紹了Java 覆蓋equals時(shí)總要覆蓋hashcode的相關(guān)資料,這里附有實(shí)例代碼,具有參考價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 實(shí)例講解JAVA 適配器模式

    實(shí)例講解JAVA 適配器模式

    這篇文章主要介紹了JAVA 適配器模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方

    Java使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方

    POI-TL 是一個(gè)基于 Apache POI 的 Java 庫(kù),專(zhuān)注于在 Microsoft Word 文檔(.docx 格式)中進(jìn)行模板填充和動(dòng)態(tài)內(nèi)容生成,下面我們看看如何使用poi-tl設(shè)置word圖片環(huán)繞方式為浮于在文字上方吧
    2025-03-03
  • 學(xué)java得這樣學(xué),學(xué)習(xí)確實(shí)也得這樣

    學(xué)java得這樣學(xué),學(xué)習(xí)確實(shí)也得這樣

    學(xué)java得這樣學(xué),學(xué)習(xí)東西確實(shí)也得這樣
    2008-02-02
  • 關(guān)于fastjson的常見(jiàn)API詳解

    關(guān)于fastjson的常見(jiàn)API詳解

    這篇文章主要介紹了關(guān)于fastjson的常見(jiàn)API詳解,Fastjson是一個(gè)Java庫(kù),可用于將Java對(duì)象轉(zhuǎn)換為其JSON表示,它還可用于將JSON字符串轉(zhuǎn)換為等效的Java對(duì)象,Fastjson可以處理任意Java對(duì)象,包括您沒(méi)有源代碼的預(yù)先存在的對(duì)象,需要的朋友可以參考下
    2023-07-07
  • springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢

    springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢

    這篇文章主要介紹了springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring AOP定義AfterReturning增加實(shí)例分析

    Spring AOP定義AfterReturning增加實(shí)例分析

    這篇文章主要介紹了Spring AOP定義AfterReturning增加,結(jié)合實(shí)例形式分析了Spring面相切面AOP定義AfterReturning增加相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Java集合案例之斗地主游戲

    Java集合案例之斗地主游戲

    這篇文章主要為大家詳細(xì)介紹了Java集合案例之斗地主游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決

    Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決

    這篇文章主要介紹了Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論

岚皋县| 清徐县| 南昌市| 彝良县| 贡嘎县| 宜宾县| 汕尾市| 开封市| 梁山县| 呼伦贝尔市| 和平县| 会昌县| 永年县| 勐海县| 商河县| 五寨县| 斗六市| 奉节县| 嘉兴市| 邮箱| 临高县| 岱山县| 宝鸡市| 利川市| 枣强县| 娄底市| 阿拉善盟| 旬阳县| 盐城市| 犍为县| 吕梁市| 什邡市| 交城县| 兴安县| 邮箱| 长泰县| 炉霍县| 鲜城| 丽水市| 綦江县| 美姑县|