写在前面
前面一篇将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/)