寫在前面
前面一篇將springCloud所需的幾個組件搭建起來了,接下來以user模塊爲例子主要記錄一下項目中集成的技術,框架,和使用方式。我想從如下幾個地方總結:java
集成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.org)mybatis
集成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/)