從0手寫springCloud項目(框架代碼詳解)

寫在前面

前面一篇將springCloud所需的幾個組件搭建起來了,接下來以user模塊爲例子主要記錄一下項目中集成的技術,框架,和使用方式。我想從如下幾個地方總結:java

  • 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,固然也不麻煩,很簡單的。mysql

pomredis

<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>

ymlspring

//能夠看到個人各個文件存放的路徑分別在哪裏
 mybatis:
  type-aliases-package: cn.iamcrawler.crawler_common.domain.goddess
  mapper-locations: cn/iamcrawler/crawlergoddess/mapper/*Mapper.xml
  type-handlers-package: cn.iamcrawler.crawlergoddess.mapper.typehandler
  global-config:
    refresh-mapper: true

那麼接下來繼承plus的兩個方法就能夠了sql

/**
 * Created by liuliang on 2019/3/21.
 */
public interface DataUserMapper extends BaseMapper<DataUser> {
}


@Service
@Slf4j
public class DataUserService extends   ServiceImpl<DataUserMapper,DataUser>{

}

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官網。segmentfault

ps:最後還有一個小知識點,其實你們能夠看到,個人xml是放在和mapper一塊兒的(默認是放在resource下面,打包成jar的時候路徑就是咱們常說的classpath),而咱們知道,在maven打包jar的時候,是不會掃描這個java下的.xml文件的,爲何我打包jar也能夠掃描呢?是由於我在maven裏面配置了一個將java下的xml也打包的程序,以下:springboot

<build>
        <finalName>crawler-goddess</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!---我上面說的就是下面這個配置哦-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
集成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.orgmybatis

集成liquibase

不知道你們是否經歷過沒有用程序代碼管理sql語句的項目,我最開始經歷過一次。每次上線前,組長會問咱們有沒有什麼sql須要執行的,上線前執行仍是上線後執行,他那邊統計好,而後在生產數據庫執行。這樣是很麻煩的,每次都要人工統計,人工執行,若是sql沒有問題還好,如果有問題,是加長了都不知道是誰寫的這句sql,問題很難追根溯源。而且每次更換系統環境,都是直接要把表結構DDL一份出來...真的是很low啊有沒有....
而liquibase是一個開源的數據跟蹤,管理工具,它能夠作咱們上面說的全部事情,而且還很強大。接下來看一下在springboot2.1.3是怎麼用的吧(boot版本不一樣,集成方式略有差別,你們注意一下)oracle

pom

<!--liquibase依賴-->
<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

yml

spring:
  application:
    name: crawler-goddess
  liquibase:
    change-log: classpath:liquibase\master.xml #標識liquibase的入口

上面也講到,classpath其實就是打包後的resource目錄,因此這個入口在resource.liquibase下的一個叫master.xml文件裏面(固然你們能夠自定義路徑)
圖片描述

看一下這個master.xml裏的信息:

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
        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">
    <!--我這裏之配置了一個路徑-->   
    <include file="classpath:liquibase/changelog/release20180919.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>


能夠看到配置裏面是讀的liquibase/changelog/release20180919.xml這個文件


release20180919.xml

 <?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
        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">

    <property name="now" value="now()" dbms="mysql,h2"/>
    <property name="autoIncrement" value="true" dbms="mysql,h2,postgresql,oracle"/>

<!--這裏又能夠引入其餘文件的sql-->
    <changeSet id="201811010924001" author="liang.liu">
        <sqlFile path="classpath:liquibase/init/init_table.sql" encoding="UTF-8"/>
        <sqlFile path="classpath:liquibase/init/add_user.sql" encoding="UTF-8"/>
    </changeSet>
    <!--也能夠本身建立表,刪除表,建立索引,刪除索引...-->
    <changeSet id="201906180001" author="liang.liu">
        <createTable tableName="test_table">
            <column name="id" type="varchar(20)" remarks="id">
                <constraints primaryKey="true"/>
            </column>
        </createTable>
    </changeSet>
</databaseChangeLog>

固然,更多的用法和配置你們也能夠參照官網使用(http://www.liquibase.org/

相關文章
相關標籤/搜索