Servlet+MyBatis項(xiàng)目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議
一、項(xiàng)目需求
在開發(fā)過程中,由于技術(shù)的不斷迭代,為了提高開發(fā)效率,需要對(duì)原有項(xiàng)目的架構(gòu)做出相應(yīng)的調(diào)整。
二、存在的問題
為了不影響項(xiàng)目進(jìn)度,架構(gòu)調(diào)整初期只是把項(xiàng)目做了簡(jiǎn)單的maven管理,引入springboot并未做spring cloud微服務(wù)處理。但隨著項(xiàng)目的進(jìn)一步開發(fā),急需拆分現(xiàn)有業(yè)務(wù),做微服務(wù)處理。因此架構(gòu)上的短板日益突出。spring cloud config 無法完全應(yīng)用,每次項(xiàng)目部署需要修改大量配置文件。嚴(yán)重影響開發(fā)效率,因此便萌生了對(duì)項(xiàng)目架構(gòu)再次調(diào)整的決心。
三、調(diào)整建議
為了兼容以前的代碼版本,盡量不修改現(xiàn)有的代碼結(jié)構(gòu),以免增加額外的工作量并且為了更好的應(yīng)用cloud config。
首先,創(chuàng)建JdbcConfigBean類,用以讀取配置文件,實(shí)例代碼入如下(僅供參考):
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; @RefreshScope @Component("jdbcConfigBean") public class JdbcConfigBean { @Value("${jdbc.driver}") private String driver; @Value("${db1.jdbc.url}") private String url; @Value("${db1.jdbc.username}") private String username; @Value("${db1.jdbc.password}") private String password; @Value("${db2.jdbc.url}") private String db2_url; @Value("${db2.jdbc.username}") private String db2_username; @Value("${db2.jdbc.password}") private String db2_password; // 其他數(shù)據(jù)源 // 其他配置 // 相應(yīng)的getter setter 方法 }
其次,創(chuàng)建數(shù)據(jù)源,代碼示例如下(僅供參考):
/** * xml Mabatis XML配置文件 * @param xml * @return **/ public static SqlSessionFactory create(String xml){ JdbcConfigBean jdbcConfigBean = (JdbcConfigBean) SpringContextUtil.getBean("jdbcConfigBean"); Properties properties = new Properties(); properties.setProperty("jdbc.driver", jdbcConfigBean.getDriver()); properties.setProperty("db1.jdbc.url", jdbcConfigBean.getUrl()); properties.setProperty("db1.jdbc.username", jdbcConfigBean.getUsername()); properties.setProperty("db1.jdbc.password", jdbcConfigBean.getPassword()); properties.setProperty("db2.virtual.jdbc.url", jdbcConfigBean.getDb2_url()); properties.setProperty("db2.virtual.jdbc.username", jdbcConfigBean.getDb2_username()); properties.setProperty("db2.virtual.jdbc.password", jdbcConfigBean.getDb2_password()); // 其他屬性 try { Reader reader = Resources.getResourceAsReader(xml); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); return sqlSessionFactoryBuilder.build(reader, properties); } catch (IOException e) { log.error("創(chuàng)建數(shù)據(jù)源失敗:" + e.getMessage()); } return null; }
以上,便可以做多數(shù)據(jù)元的配置,并且在不改動(dòng)現(xiàn)有代碼結(jié)構(gòu)的條件下很好的集成spring cloud config和Mybatis。
四、小結(jié)
寫作目的不是為了解決具體的問題,因?yàn)槊總€(gè)人遇到的項(xiàng)目都不相同,問題也不會(huì)一樣,應(yīng)用場(chǎng)景也不盡相同。對(duì)于具體問題可能有失參考意義。但是我們也應(yīng)該看到通用的部分,比如多數(shù)據(jù)源的配置,cloud config的應(yīng)用等等。
最后需要說明的一點(diǎn)是不要拘泥于具體的實(shí)現(xiàn),而是要體會(huì)其中的邏輯,理解技術(shù)應(yīng)用的方式。具體實(shí)現(xiàn)并不重要,重要的是解決問題的過程以及其中的思想,為什么要這樣做,為什么可以這樣做,這樣做的好處在哪里?真正理解技術(shù),這些問題便不難回答。
小結(jié)難免有不當(dāng)之處,歡迎諸位指正!希望可以通過不斷的討論小結(jié)精進(jìn)技術(shù)。讓我們同技術(shù)死磕到底!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- MyBatis實(shí)現(xiàn)注冊(cè)及獲取Mapper
- SpringBoot+Mybatis使用Mapper接口注冊(cè)的幾種方式
- SpringBoot+Mybatis實(shí)現(xiàn)登錄注冊(cè)的示例代碼
- IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項(xiàng)目實(shí)現(xiàn)動(dòng)態(tài)登錄與注冊(cè)功能
- Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼
- Spring MVC+mybatis實(shí)現(xiàn)注冊(cè)登錄功能
- Mybatis與微服務(wù)注冊(cè)的詳細(xì)過程
相關(guān)文章
簡(jiǎn)要分析Java多進(jìn)程編程的并發(fā)控制
這篇文章介紹了簡(jiǎn)要分析Java多進(jìn)程編程的并發(fā)控制,主要針對(duì)內(nèi)存獲取方面,需要的朋友可以參考下2015-11-11Java實(shí)現(xiàn)的動(dòng)態(tài)數(shù)字時(shí)鐘功能示例【顯示世界時(shí)間】
這篇文章主要介紹了Java實(shí)現(xiàn)的動(dòng)態(tài)數(shù)字時(shí)鐘功能,結(jié)合實(shí)例形式分析了java顯示北京、紐約、倫敦等世界時(shí)間的相關(guān)日期時(shí)間運(yùn)算操作技巧,需要的朋友可以參考下2019-03-03java實(shí)現(xiàn)對(duì)對(duì)碰小游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)對(duì)對(duì)碰小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12詳解基于spring多數(shù)據(jù)源動(dòng)態(tài)調(diào)用及其事務(wù)處理
本篇文章主要介紹了基于spring多數(shù)據(jù)源動(dòng)態(tài)調(diào)用及其事務(wù)處理 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Java報(bào)錯(cuò):ClassCastException問題解決方法
異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,下面這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):ClassCastException問題解決方法,需要的朋友可以參考下2024-07-07Java?從json提取數(shù)組并轉(zhuǎn)換為list的操作方法
這篇文章主要介紹了Java?從json提取出數(shù)組并轉(zhuǎn)換為list,使用getJSONArray()獲取到j(luò)sonarray后,再將jsonArray轉(zhuǎn)換為字符串,最后將字符串解析為L(zhǎng)ist列表,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10java中堆內(nèi)存與棧內(nèi)存的知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是關(guān)于java中堆內(nèi)存與棧內(nèi)存的知識(shí)點(diǎn)總結(jié),有需要的朋友們可以跟著學(xué)習(xí)下。2019-12-12