天天看點

oauth 手寫_從0手寫springCloud項目(架構代碼詳解)

寫在前面

前面一篇将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檔案裡面(當然大家可以自定義路徑)

oauth 手寫_從0手寫springCloud項目(架構代碼詳解)

看一下這個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">