创建工程
本章节介绍基于so-fast-pl-cloud源码进行开发的方式创建工程。 so-fast-pl-cloud内置so-fast-biz模块是开发业务服务的父级目录, 在biz-modules工程下创建biz-hello模块
修改biz-hello模块中的pom.xml文件
在pom.xml中加入biz-common-web依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>biz-modules</artifactId>
<groupId>com.sofast.cloud</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>biz-hello</artifactId>
<dependencies>
<dependency>
<groupId>com.sofast.cloud</groupId>
<artifactId>biz-common-web</artifactId>
</dependency>
</dependencies>
</project>
因为biz-common-web中引入了so-fast-web-starter,所以我们在pom.xml中加入biz-common-web就可以使用
注意点:
- 版本号:
标签中的版本为${revision} - 在父 pom.xml(biz-modules模块)中
标签中追加biz-hello模块(一般会自动添加,如果修改或者删除项目则需要手动更改)
以下为biz-modules模块中的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>biz-modules</artifactId>
<groupId>com.sofast.cloud</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>biz-hello</artifactId>
<description>业务演示模块</description>
<dependencies>
<dependency>
<groupId>com.sofast.cloud</groupId>
<artifactId>biz-common-web</artifactId>
</dependency>
</dependencies>
</project>
创建启动类
/**
*
* @author NCIT
* @date 2021/1/19
*/
@EnableSwagger2
@EnableSolFeign
@EnableDiscoveryClient
@SpringBootApplication
public class SoFastHelloApplication {
public static void main(String[] args) {
SpringApplication.run(SoFastHelloApplication.class, args);
}
}
@EnableSwagger2 表示要启用swagger api,swagger的扫描路径需要在bootstrap.yml中进行配置
@EnableSolFeign 表示要启用Feign,默认扫描路径为「com.sofast.cloud」,如果自定义包路径,请配置basePackages参数
@EnableDiscoveryClient:服务发现客户端
常规微服务需要同时开启以上4个注解。
注意:SOFAST中使用的orm框架为mybatis-plus,默认的mapper接口扫描路径为:@MapperScan({"com.sofast.cloud..mapper."}),如果自定义开发时,创建了其他前缀包名,请在启动文件配置自定义MapperScan路径,包名规划请尽可能遵守sofast框架规范,减少参数设置
配置文件
在resources下创建bootstrap.yml
bootstrap.yml
修改点:
- 服务端口:server.port
- swagger包扫描:swagger.basePackage
- Nacos连接信息
# 服务端口
server:
port: 9090
spring:
application:
name: @artifactId@
profiles:
# 从根pom.xml中获取的环境区分变量
active: @profileActive@
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: ${NACOS_HOST:localhost}:${NACOS_PORT:8848}
# 服务分组
group: SO_FAST_GROUP
username: nacos
password: so-fast(Nttdata)
config:
# 配置中心地址
server-addr: ${spring.cloud.nacos.discovery.server-addr}
# 配置文件格式
file-extension: yml
# 配置分组
group: SO_FAST_GROUP
# 共享配置(例:application-dev.yml 在dev环境中,配置了共享配置的服务都会读取data-id是application-dev.yml中的配置)
# 优先级:bootstrap.yml > bootstrap-dev.yml > application.yml > application-dev.yml > biz-hello.yml > biz-hello-dev.yml
# PS:bootstrap.yml为项目资源文件,无法通过Nacos配置;同属性配置右侧会覆盖左侧
shared-configs[0]:
data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
group: ${spring.cloud.nacos.config.group}
refresh: true
username: ${spring.cloud.nacos.discovery.username}
password: ${spring.cloud.nacos.discovery.password}
context-path: /nacos
#swagger配置
swagger:
# 包扫描
basePackage: com.sofast.cloud.biz.hello
# 利用info端点,加入版本等信息
info:
versin: @project.version@
name: @project.artifactId@
group: @project.groupId@
description: @project.description@
#还可以自定义信息
author: NCIT.1SOL
在nacos中创建biz-hello-dev.yml配置文件
Data ID :biz-hello-dev.yml
Group :SO_FAST_GROUP
配置格式 :yaml
注意修改数据库连接信息
########### 本地开发用环境 ###############
# 数据源配置
spring:
datasource:
dynamic:
datasource:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/biz-hello?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# 服务模块
devtools:
restart:
# 热部署开关
enabled: true
#mybatis-plus配置
mybatis-plus:
# 自定义xml文件路径
mapper-locations: classpath*:mapper/**/*Mapper.xml
# MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)
#type-aliases-package: com.sofast.cloud.**.entity, com.sofast.cloud.**.domain.**
# mybatis执行器 该执行器类型会复用预处理语句(PreparedStatement)
executor-type: reuse
# 控制台打印sql
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
#是否控制台 print mybatis-plus 的 LOGO
banner: false
db-config:
select-strategy: not_null
# 逻辑删除配置
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: deleteFlg
使用SoFast网关代理微服务需要在nacos中的sofast-gateway-routes配置里添加如下信息:
{
"id": "biz-hello",
"order": 10,
"predicates": [{
"args": {
"pattern": "/biz-hello/**"
},
"name": "Path"
}],
"filters": [{
"name": "StripPrefix",
"args": {
"parts": 1
}
}],
"uri": "lb://biz-hello"
}
访问SoFast网关Swagger地址:http://localhost:9000/doc.html ,选择服务下拉框(左上角)中选择biz-hello服务即可
PS:需要先启动so-fast-log服务,否则SOFAST网关Swagger初始化会报错
常见问题
1.关于数据源
SOFAST框架默认使用动态数据源插件,因此在启动类上,我们需要排除默认的DruidDataSourceAutoConfigure配置类,而使用动态数据源插件携带的配置类;在配置文件中,必须按照动态数据源的配置方式,配置jdbc连接,否则启动会报错。
如果该微服务中不需要连接数据库和redis,那么请在pom.xml文件中将数据库依赖包排除。例如:
<dependency>
<groupId>com.sofast.cloud</groupId>
<artifactId>so-fast-web-starter</artifactId>
<exclusions>
<!-- 排除数据库 -->
<exclusion>
<groupId>com.sofast.cloud</groupId>
<artifactId>so-fast-mybatis-starter</artifactId>
</exclusion>
<!-- 排除数据库 -->
<exclusion>
<groupId>com.sofast.cloud</groupId>
<artifactId>so-fast-ds-starter</artifactId>
</exclusion>
<!-- 排除redis -->
<exclusion>
<groupId>com.sofast.cloud</groupId>
<artifactId>so-fast-redis-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
2.关于微服务路由配置
微服务开发完成后,需要通过网关进行统一转发访问,生产环境不允许直接暴露微服务端口;但是在本地开发时,可以直接访问微服务api。
不通过网关代理,在微服务中是无法获取token及用户信息的,因此只能作为本机开发调试使用。
测试和生产环境,需要在gateway中配置动态路由,才可以通过网关来访问微服务,动态路由的配置可以参考网关中的示例。
3.关于swagger
sofast框架默认提供swagger api doc,需要在启动类上加入注解@EnableSwagger2,以及在bootstrap.yml文件中配置扫描的包路径
#swagger配置(修改为自己的包名)
swagger:
basePackage: com.sofast.cloud.biz.hello
服务启动后,通过http://ip:port/doc.html 地址就可以访问swagger