Servlet+MyBatis項目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議
一、項目需求
在開發(fā)過程中,由于技術(shù)的不斷迭代,為了提高開發(fā)效率,需要對原有項目的架構(gòu)做出相應(yīng)的調(diào)整。
二、存在的問題
為了不影響項目進度,架構(gòu)調(diào)整初期只是把項目做了簡單的maven管理,引入springboot并未做spring cloud微服務(wù)處理。但隨著項目的進一步開發(fā),急需拆分現(xiàn)有業(yè)務(wù),做微服務(wù)處理。因此架構(gòu)上的短板日益突出。spring cloud config 無法完全應(yīng)用,每次項目部署需要修改大量配置文件。嚴重影響開發(fā)效率,因此便萌生了對項目架構(gòu)再次調(diào)整的決心。
三、調(diào)整建議
為了兼容以前的代碼版本,盡量不修改現(xiàn)有的代碼結(jié)構(gòu),以免增加額外的工作量并且為了更好的應(yīng)用cloud config。
首先,創(chuàng)建JdbcConfigBean類,用以讀取配置文件,實例代碼入如下(僅供參考):
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ù)元的配置,并且在不改動現(xiàn)有代碼結(jié)構(gòu)的條件下很好的集成spring cloud config和Mybatis。
四、小結(jié)
寫作目的不是為了解決具體的問題,因為每個人遇到的項目都不相同,問題也不會一樣,應(yīng)用場景也不盡相同。對于具體問題可能有失參考意義。但是我們也應(yīng)該看到通用的部分,比如多數(shù)據(jù)源的配置,cloud config的應(yīng)用等等。
最后需要說明的一點是不要拘泥于具體的實現(xiàn),而是要體會其中的邏輯,理解技術(shù)應(yīng)用的方式。具體實現(xiàn)并不重要,重要的是解決問題的過程以及其中的思想,為什么要這樣做,為什么可以這樣做,這樣做的好處在哪里?真正理解技術(shù),這些問題便不難回答。
小結(jié)難免有不當(dāng)之處,歡迎諸位指正!希望可以通過不斷的討論小結(jié)精進技術(shù)。讓我們同技術(shù)死磕到底!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
springboot如何使用assembly打包項目和啟動腳本
這篇文章主要介紹了springboot如何使用assembly打包項目和啟動腳本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
使用jmx?exporter采集kafka指標(biāo)示例詳解
這篇文章主要為大家介紹了使用jmx?exporter采集kafka指標(biāo)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Java 字節(jié)數(shù)組類型(byte[])與int類型互轉(zhuǎn)方法
下面小編就為大家?guī)硪黄狫ava 字節(jié)數(shù)組類型(byte[])與int類型互轉(zhuǎn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Java設(shè)置session超時的幾種方式總結(jié)
這篇文章主要介紹了Java設(shè)置session超時的幾種方式總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-07-07

