寫在前面
前面一篇将springCloud所需的幾個元件搭建起來了,接下來以user子產品為例子主要記錄一下項目中內建的技術,架構,和使用方式。我想從以下幾個地方總結:
mybatis-plus3
lcn5.0.2
liquibase
oauth2
others(es,rabbitmq,全局異常處理,feign之間異常處理,logback,mysql,redis)
內建mybatis-plus3
可能有些同學常用的持久層架構是jpa,但是就我實踐而言,mybatisplus好用的不是一丁點,個人建議用mybatisplus...現在plus3的版本支援的還是蠻多的:樂觀鎖,版本号,代碼生成器,分頁插件,熱加載,通用枚舉,自動填充,動态資料源....詳見官網(https://mp.baomidou.com),而且3.0內建也比2.x簡單了不少,最簡單的隻需要加一個pom坐标即可,但是如果需要個性化配置,我們還是要寫config,當然也不麻煩,很簡單的。
pom
com.baomidou
mybatis-plus-boot-starter
3.1.0
yml
//可以看到我的各個檔案存放的路徑分别在哪裡
mybatis:
type-aliases-package: cn.iamcrawler.crawler_common.domain.goddess
mapper-locations: cn/iamcrawler/crawlergoddess/mapper
public interface DataUserMapper extends BaseMapper {
}
@Service
@Slf4j
public class DataUserService extends ServiceImpl{
}
ps:大家可以想一想,spring的controller,service,mapper需要使用注解将其辨別為bean才能掃描得到,而這裡的mapper卻沒有添加@Repository注解,這是因為我在注解類上加了一個注解,指定spring啟動的時候掃描到這個包下,是以這裡就可以不用添加@Repository注解,也可以被spring掃描到啦。主類的注解如下:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableTransactionManagerServer
@MapperScan("cn.iamcrawler.crawlergoddess.mapper")//上面說的,就是這個注解!
public class CrawlerGoddessApplication {
public static void main(String[] args) {
SpringApplication.run(CrawlerGoddessApplication.class, args);
}
}
是的,就是這麼簡單。plus最簡單的內建就完成了,接下來繼承mapper接口,service接口就可以寫sql了。具體詳見mybatis-plus官網。
ps:最後還有一個小知識點,其實大家可以看到,我的xml是放在和mapper一起的(預設是放在resource下面,打包成jar的時候路徑就是我們常說的classpath),而我們知道,在maven打包jar的時候,是不會掃描這個java下的.xml檔案的,為什麼我打包jar也可以掃描呢?是因為我在maven裡面配置了一個将java下的xml也打包的程式,如下:
crawler-goddess
org.springframework.boot
spring-boot-maven-plugin
src/main/java
**/*.xml
src/main/resources
內建lcn5.0.2
微服務內建分布式事務架構已經不是一個新鮮的事情,在這方面,我前面也寫過好幾個文章介紹過,其中有springboot1.5.9+lcn4.1.0( https://segmentfault.com/a/11... ), 有springboot2.1.3+lcn5.0.2( https://segmentfault.com/a/11... )。大家可以按需閱讀并配置,當然這裡我這個demo配置的是5.0.2版本.畢竟這個版本比4.1.0強大了不少,并且配置也更加友善。具體大家也可以參照lcn官網,描述的非常詳細(http://www.txlcn.org)
內建liquibase
不知道大家是否經曆過沒有用程式代碼管理sql語句的項目,我最開始經曆過一次。每次上線前,組長會問我們有沒有什麼sql需要執行的,上線前執行還是上線後執行,他那邊統計好,然後在生産資料庫執行。這樣是很麻煩的,每次都要人工統計,人工執行,如果sql沒有問題還好,若是有問題,是加長了都不知道是誰寫的這句sql,問題很難追根溯源。并且每次更換系統環境,都是直接要把表結構DDL一份出來...真的是很low啊有沒有....
而liquibase是一個開源的資料跟蹤,管理工具,它可以做我們上面說的所有事情,并且還很強大。接下來看一下在springboot2.1.3是怎麼用的吧(boot版本不同,內建方式略有差異,大家注意一下)
pom
org.liquibase
liquibase-core
yml
spring:
application:
name: crawler-goddess
liquibase:
change-log: classpath:liquibase\master.xml #辨別liquibase的入口
上面也講到,classpath其實就是打包後的resource目錄,是以這個入口在resource.liquibase下的一個叫master.xml檔案裡面(當然大家可以自定義路徑)
看一下這個master.xml裡的資訊:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
可以看到配置裡面是讀的liquibase/changelog/release20180919.xml這個檔案
release20180919.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">