欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

整合的坑

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

   1、考慮到數(shù)據(jù)庫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> 

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

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

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

    2、之前因?yàn)榫鸵粋€(gè)數(shù)據(jù)源(一個(gè)sqlSessionFactory),所以沒有在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}等屬性無法被properties里的指定值替換。一開始自然想不到是因?yàn)閟pring和mybatis整合的原因,所以一度不斷檢查spring配置文件是否有誤,properties文件是否有誤,是不是properties文件沒被引用到或者properties文件沒有被編譯到classpath目錄下等。當(dāng)然,分析沒有分析出問題的原因,自然就不可能找到解決問題的辦法。只好求助于網(wǎng)絡(luò)。最終還是找到了答案

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

<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屬性是字符串類型

原因

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

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

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

相關(guān)文章

  • java動(dòng)態(tài)口令登錄實(shí)現(xiàn)過程詳解

    java動(dòng)態(tài)口令登錄實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了java動(dòng)態(tài)口令登錄實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java實(shí)現(xiàn)將CSV轉(zhuǎn)為Excel的示例代碼

    Java實(shí)現(xiàn)將CSV轉(zhuǎn)為Excel的示例代碼

    CSV(Comma?Separated?Values)文件是一種純文本文件,包含用逗號(hào)分隔的數(shù)據(jù),常用于將數(shù)據(jù)從一個(gè)應(yīng)用程序?qū)牖驅(qū)С龅搅硪粋€(gè)應(yīng)用程序。本文將利用Java實(shí)現(xiàn)CSV轉(zhuǎn)為Excel,感興趣的可以了解一下
    2022-03-03
  • Java練手小項(xiàng)目實(shí)現(xiàn)一個(gè)項(xiàng)目管理系統(tǒng)

    Java練手小項(xiàng)目實(shí)現(xiàn)一個(gè)項(xiàng)目管理系統(tǒng)

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)項(xiàng)目管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證

    SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證

    這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)登錄認(rèn)證的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 基于Java protected的深入理解

    基于Java protected的深入理解

    本篇文章是對Java protected進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 基于Java實(shí)現(xiàn)Socket編程入門

    基于Java實(shí)現(xiàn)Socket編程入門

    Java最初是作為網(wǎng)絡(luò)編程語言出現(xiàn)的,使得客戶端和服務(wù)器的溝通變成了現(xiàn)實(shí),而在網(wǎng)絡(luò)編程中,使用最多的就是Socket,本文就來介紹一下基于Java實(shí)現(xiàn)Socket編程入門,感興趣的可以來了解一下
    2022-03-03
  • 詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包

    詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包

    這篇文章主要介紹了如何在不使用他人jar包的情況下優(yōu)雅的進(jìn)行dubbo調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Spring Boot 中的 Spring Cloud Feign的原理解析

    Spring Boot 中的 Spring Cloud Feign的原

    Spring Cloud Feign 是 Spring Cloud 中的一個(gè)組件,它可以幫助我們實(shí)現(xiàn)聲明式的 REST 客戶,這篇文章主要介紹了Spring Boot 中的 Spring Cloud Feign,需要的朋友可以參考下
    2023-07-07
  • 解決@Autowired注入空指針問題(利用Bean的生命周期)

    解決@Autowired注入空指針問題(利用Bean的生命周期)

    這篇文章主要介紹了解決@Autowired注入空指針問題(利用Bean的生命周期),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • springboot中.yml文件參數(shù)的讀取方式

    springboot中.yml文件參數(shù)的讀取方式

    這篇文章主要介紹了springboot中.yml文件參數(shù)的讀取方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論