Hello SoFast
本章节旨在指导用户基于 SOFAST 框架快速开发一个独立的微服务demo创建后台服务及代码实现
创建工程
在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就可以使用
注意点:
- 版本号:<version>标签中的版本为${revision}
- 在父 pom.xml(biz-modules模块)中 <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(exclude = DruidDataSourceAutoConfigure.class)
public class SoFastHelloApplication {
public static void main(String[] args) {
SpringApplication.run(SoFastHelloApplication.class, args);
}
}
配置文件
在resources下创建bootstrap.yml和logback-spring.xml
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
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
此文件不能使用默认名称logback.xml,因为logback.xml会优先加载application.yml文件,因此挡在logback中使用springProperty标签将无法获取信息;
解决方案:将文件命名为logback-spring.xml
-->
<configuration debug="false" scan="false">
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<property name="log.path" value="logs/${spring.application.name}"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 控制台打印日志 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 普通日志 -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
</appender>
<!-- 错误日志 -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!--nacos 心跳 INFO 屏蔽-->
<logger name="com.alibaba.nacos" level="OFF">
<appender-ref ref="error"/>
</logger>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
</root>
</configuration>
在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
实现接口
在controller目录下新建HelloController.java代码如下
package com.sofast.cloud.biz.hello.controller;
import com.sofast.cloud.common.domain.vo.R;
import com.sofast.cloud.core.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 微服务demo演示
* </p>
*
* @author NCIT
* @date 2021-1-19
*/
@Api(value = "微服务demo演示", tags = "微服务demo演示")
@RestController
@RequestMapping("/biz")
public class HelloController extends BaseController {
@ApiOperation(value = "Hello Word演示")
@GetMapping(value = "/hello")
public R<String> hello() {
return R.data("hello word");
}
}
至此后台服务创建完成
启动biz-hello服务,在浏览器中访问Swagger地址: http://localhost:9090/doc.html ,验证后台接口
使用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初始化会报错