maven微服务项目,根据不同业务拆分为了几个不同的服务;
依赖继承关系 项目初创建若是学习可以看看参考的新建一遍,否则大可直接下载源码试运行后,简单修改、练习。其中有代码生成器,可以根据数据库生成基础代码。
一、创建项目 guli在工作目录下新建一个文件夹guli
在idea中选择 File - Open,选择这个文件夹
二、创建父工程guli-framework-parent 1、创建父工程在项目guli下创建模块:使用 Spring Initializr 快速初始化一个 Spring Boot 模块,版本:2.0.7.RELEASE
修改版本为 :2.0.7.RELEASE
节点后面添加
pom
配置
1.8 0.0.1-SNAPSHOT 3.0.5 2.0 2.7.0 2.8.32.10.1 3.9 1.3.1 2.6 4.5.1 2.8.2 0.7.0 4.3.3 3.1.0 2.15.0 1.4.51.2.28 20170516
配置 锁定依赖的版本
三、创建模块guli-framework-common 1、创建模块com.guli guli-framework-common${guli.version} com.baomidou mybatis-plus-boot-starter${mybatis-plus.version} org.apache.velocity velocity-engine-core${velocity.version} io.springfox springfox-swagger2${swagger.version} io.springfox springfox-swagger-ui${swagger.version} com.aliyun.oss aliyun-sdk-oss${aliyun.oss.version} joda-time joda-time${jodatime.version} org.apache.poi poi${poi.version} org.apache.poi poi-ooxml${poi.version} commons-fileupload commons-fileupload${commons-fileupload.version} org.springframework.cloud spring-cloud-dependenciesFinchley.SR2 pom import commons-io commons-io${commons-io.version} org.apache.httpcomponents httpclient${httpclient.version} com.google.code.gson gson${gson.version} io.jsonwebtoken jjwt${jwt.version} com.aliyun aliyun-java-sdk-core${aliyun-java-sdk-core.version} com.aliyun.oss aliyun-sdk-oss${aliyun-sdk-oss.version} com.aliyun aliyun-java-sdk-vod${aliyun-java-sdk-vod.version} com.aliyun aliyun-sdk-vod-upload${aliyun-sdk-vod-upload.version} com.alibaba fastjson${fastjson.version} org.json json${json.version}
创建一个普通maven模块
Parent:guli-framework-parent
Artifact:guli-framework-common
配置 dependencies
四、创建模块guli-microservice-edu 导入数据库org.springframework spring-webmvctrue org.springframework.boot spring-boot-starter-jsontrue io.springfox springfox-swagger2true io.springfox springfox-swagger-uitrue org.projectlombok lomboktrue com.baomidou mybatis-plus-boot-startertrue org.apache.poi poitrue org.apache.poi poi-ooxmltrue
数据脚本:guli_edu.sql
1、创建模块创建一个普通maven模块
Parent:guli-framework-parent
Artifact:guli-microservice-edu
2、配置 pom.xml
3、配置application.properties文件com.guli guli-framework-commonorg.springframework.boot spring-boot-starter-webcom.baomidou mybatis-plus-boot-startermysql mysql-connector-javaorg.apache.velocity velocity-engine-coreio.springfox springfox-swagger2io.springfox springfox-swagger-uiorg.projectlombok lombokorg.apache.poi poicommons-fileupload commons-fileuploadorg.springframework.boot spring-boot-devtoolstrue org.springframework.boot spring-boot-starter-testtest
resources目录下创建文件 application.properties
# 服务端口 server.port=8110 # 服务名 spring.application.name=guli-edu # 环境设置:dev、test、prod spring.profiles.active=dev # mysql数据库连接 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/guli_edu?characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 # Hikari是Spring Boot 2.0之后默认整合的数据库连接池,比druid更快的数据库连接池 # 数据源类型 spring.datasource.type=com.zaxxer.hikari.HikariDataSource # 连接池名称,默认HikariPool-1 spring.datasource.hikari.pool-name=GuliHikariPool # 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值 spring.datasource.hikari.maximum-pool-size=12 # 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒 spring.datasource.hikari.connection-timeout=60000 # 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size spring.datasource.hikari.minimum-idle=10 # 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。 # 只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放 spring.datasource.hikari.idle-timeout=500000 # 连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短 spring.datasource.hikari.max-lifetime=540000 #连接测试查询 spring.datasource.hikari.connection-test-query=SELECT 1 #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl4、创建MP代码生成器
在test/java目录下创建包com.guli.edu,创建代码生成器:CodeGenerator.java
package com.guli.edu;
public class CodeGenerator {
@Test
public void genCode() {
String moduleName = "edu";
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("Helen");
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER_STR); //主键策略
gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
gc.setSwagger2(true);//开启Swagger2模式
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/guli_" + moduleName);
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(moduleName); //模块名
pc.setParent("com.guli");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude(moduleName + "_\w*");//设置要映射的表名
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_");//设置表前缀不生成
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀
//自动填充
TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
ArrayList tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
strategy.setVersionFieldName("version");//乐观锁列
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
执行代码生成器方法
说明:
XxxServiceImpl 继承了 ServiceImpl 类,并且MP为我们注入了 XxxMapper
这样可以使用 service 层默认为我们提供的很多方法,当然也可以调用我们自己在 dao 层编写的方法。
5、修改entityTeacher.java deleted字段添加注解
@TableField(value = "is_deleted")
Video.java free字段添加注解
@TableField(value = "is_free")6、编写后台管理api接口
在controller包下创建admin包,创建TeacherAdminController.java
package com.guli.edu.controller.admin;
@RestController
@RequestMapping("/admin/edu/teacher")
public class TeacherAdminController {
}
获取所有讲师列表
@Autowired private TeacherService teacherService; @GetMapping public List7、创建SpringBoot配置文件list(){ return teacherService.list(null); }
在edu包下创建config包,创建MyBatisPlusConfig.java
package com.guli.edu.config;
@Configuration
@EnableTransactionManagement
@MapperScan("com.guli.edu.mapper")
public class MyBatisPlusConfig {
}
配置相关插件
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1000);//ms,超过此处设置的ms则sql不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
8、创建SpringBoot启动类
在edu包下创建config包,创建EduApplication.java
package com.guli.edu;
@SpringBootApplication
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class, args);
}
}
9、运行启动类
访问 http://localhost:8110/admin/edu/teacher 得到json数据
10、统一返回的json时间格式默认情况下json时间格式带有时区,并且是世界标准时间,和我们的时间差了八个小时
在application.properties中设置
#返回json的全局时间格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8四、逻辑删除 1、TeacherAdminController添加删除方法
@DeleteMapping("{id}")
public boolean removeById(@PathVariable String id){
return teacherService.removeById(id);
}
2、使用postman测试删除
重启edu项目后测试
http://localhost:8110/admin/edu/teacher/1
测试结果:数据库中的delete字段被置为1
五、跨域配置 1、什么是跨域浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。前后端分离开发中,需要考虑ajax跨域的问题。
这里我们可以从服务端解决这个问题
2、配置在Controller类上添加注解
@CrossOrigin //跨域maven依赖管理
依赖的继承
以来的传递
被其他子项目继承 dependencyManagement 管理版本,相应依赖不会被下载到maven仓库,在子项目中如果有相同的依赖,必须配置 dependencies 统一依赖管理,相应依赖会被下载到maven仓库,在子项目中如果有相同的依赖,则无需配置通用工具项目
被其他子项目依赖 dependencies 管理当前项目的依赖子项目
dependencies 管理依赖,相应依赖会被下载到maven仓库 依赖继承 继承父项目中dependencies节点下的依赖管理 依赖的传递 如果当前项目依赖的通用工具项目,则通用工具项目下的依赖也会被传递到当前项目



