一、基本环境搭建
这里使用jdk8+maven3.6+mysql5.5
1、创建基本工程:
其中common公共模块pom文件导入如下:
<?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>shanjupay</artifactId> <groupId>com.shanjupay</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shanjupay-common</artifactId> <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> <finalName>${project.name}</finalName> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <compilerArguments> <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath> </compilerArguments> </configuration> </plugin> </plugins> </build> </project>
项目父模块pom文件如下:
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.shanjupay</groupId> <artifactId>shanjupay</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>shanjupay-common</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <org.projectlombok.version>1.18.0</org.projectlombok.version> <org.mapstruct.version>1.3.0.Final</org.mapstruct.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-jwt</artifactId> <version>1.0.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>2.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>${org.mapstruct.version}</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.0-jre</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version> </dependency> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.7.73.ALL</version> </dependency> <dependency> <groupId>com.github.tedzhdz</groupId> <artifactId>wxpay-sdk</artifactId> <version>3.0.10</version> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.2.25</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.9.1</version> </dependency> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.3.RELEASE</version> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project.name}</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> </plugin> </plugins> </build> </project>
安装lombok插件
二、搭建商户平台模块:
搭建以下几个服务:
这里说明下三者的关系
提供外部访问接口(controller):shanjupay-merchant-application
暴露给shanjupay-merchant-application调用的service层:shanjupay-merchant-api
真正的去实现业务逻辑(serviceImpl+dao+entity):shanjupay-merchant-service
controller层通过dubbo去调用service的接口(service的实现就不会暴露)
数据库导入
搭建上面的三个服务:
1、shanjupay-merchant-application
pom文件:<?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>shanjupay</artifactId> <groupId>com.shanjupay</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shanjupay-merchant-application</artifactId> <dependencies> <!--阿里大于短信--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> </dependency> <dependency> <groupId>com.shanjupay</groupId> <artifactId>shanjupay-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.shanjupay</groupId> <artifactId>shanjupay-merchant-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--Nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-config</artifactId> </dependency> <!--Nacos注册中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--Dubbo启动器--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!--web启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--springboot启动器,排除自带的logging依赖(使用自己的log4j4启动器依赖)--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐startee</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!--log4j4启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐log4j2</artifactId> </dependency> <!--注释处理器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐configuration‐processor</artifactId> </dependency> <!--健康检查--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐actuator</artifactId> </dependency> <!--测试启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐test</artifactId> </dependency> </dependencies> </project>
bootstrap.yml文件(bootstrap.yml配置比application.yml先加载)
server: port: 57010 #启动端口 命令行注入 max-http-header-size: 100KB nacos: server: addr: 127.0.0.1:8848 spring: application: name: merchant-application main: allow-bean-definition-overriding: true # Spring Boot 2.1 需要设定 cloud: nacos: discovery: server-addr: ${nacos.server.addr} #调用上面的nacos地址 namespace: eeaa8bff-98c3-4222-ae95-dd92275ec758 #命名空间 cluster-name: DEFAULT config: server-addr: ${nacos.server.addr} # 配置中心地址 file-extension: yaml namespace: eeaa8bff-98c3-4222-ae95-dd92275ec758 # 命令行注入 group: SHANJUPAY_GROUP # 聚合支付业务组 ext-config: - refresh: true data-id: spring-boot-http.yaml # spring boot http配置 group: COMMON_GROUP # 通用配置组 #SpringMVC上传文件配置 servlet: multipart: #默认支持文件上传. enabled: true #支持文件写入磁盘. file-size-threshold: 0 # 上传文件的临时目录 location: # 最大支持文件大小 max-file-size: 1MB # 最大支持请求大小 max-request-size: 30MB dubbo: scan: # dubbo 服务扫描基准包 base-packages: com.shanjupay protocol: # dubbo 协议 name: dubbo port: 20891 registry: address: nacos://127.0.0.1:8848 application: qos: port: 22310 # dubbo qos端口配置 命令行注入 consumer: check: false timeout: 3000 retries: -1 logging: config: classpath: log4j2.xml #日志记录地址
在Nacos中添加spring-boot-http.yaml配置,Group:COMMON_GROUP 这里统一使用dev命名空间
在resources目录下添加log4j2配置文件:log4j2.xml log4j2是log4j的改进版本,性能比log4j要高,通常日志配置文件在开发可以调整日志级别,输出详细的日志 来跟踪程序的执行。
<?xml version="1.0" encoding="UTF-8"?> <Configuration monitorInterval="180" packages=""> <properties> <property name="prjname">${project.name}</property> <property name="logdir">logs</property> <property name="PATTERN">[${project.name}][${env:SERVER_PORT}] %date{YYYY-MM-dd HH:mm:ss,SSS} %highlight{%level} [%thread][%file:%line] - %msg%n%throwable</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${PATTERN}"/> </Console> <RollingFile name="ErrorAppender" fileName="${logdir}/${prjname}_error.log" filePattern="${logdir}/$${date:yyyy-MM-dd}/${prjname}_error.%d{yyyy-MM-dd-HH}.log" append="true"> <PatternLayout pattern="${PATTERN}"/> <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingFile> <RollingFile name="DebugAppender" fileName="${logdir}/${prjname}_info.log" filePattern="${logdir}/$${date:yyyy-MM-dd}/${prjname}_info.%d{yyyy-MM-dd-HH}.log" append="true"> <PatternLayout pattern="${PATTERN}"/> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingFile> <!--异步appender--> <Async name="AsyncAppender" includeLocation="true"> <AppenderRef ref="ErrorAppender"/> <AppenderRef ref="DebugAppender"/> </Async> </Appenders> <Loggers> <!--过滤掉spring和mybatis的一些无用的debug信息--> <logger name="org.springframework" level="INFO"> </logger> <logger name="org.mybatis" level="INFO"> </logger> <logger name="springfox" level="INFO"> </logger> <logger name="org.apache.http" level="INFO"> </logger> <logger name="com.alibaba.nacos" level="WARN"> </logger> <!--OFF 0--> <!--FATAL 100--> <!--ERROR 200--> <!--WARN 300--> <!--INFO 400--> <!--DEBUG 500--> <!--TRACE 600--> <!--ALL Integer.MAX_VALUE--> <Root level="INFO" includeLocation="true"> <AppenderRef ref="AsyncAppender"/> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
2、shanjupay-merchant (里面包含service、api两个模块)
2.1、shanjupay-merchant-api模块:
pom文件:
<?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>shanjupay-merchant</artifactId> <groupId>com.shanjupay</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shanjupay-merchant-api</artifactId> <dependencies> <dependency> <groupId>com.shanjupay</groupId> <artifactId>shanjupay-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
2.2、service模块
pom文件:
<?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>shanjupay-merchant</artifactId> <groupId>com.shanjupay</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shanjupay-merchant-service</artifactId> <dependencies> <dependency> <groupId>com.shanjupay</groupId> <artifactId>shanjupay-merchant-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 对象池 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> </dependency> </dependencies> </project>
加上上面的log4j2.xml
bootstrap.yml文件:
server: port: 56040 #启动端口 命令行注入 max-http-header-size: 100KB nacos: server: addr: 127.0.0.1:8848 spring: application: name: merchant-service main: allow-bean-definition-overriding: true # Spring Boot 2.1 需要设定 cloud: nacos: discovery: server-addr: ${nacos.server.addr} namespace: eeaa8bff-98c3-4222-ae95-dd92275ec758 cluster-name: DEFAULT config: server-addr: ${nacos.server.addr} # 配置中心地址 file-extension: yaml namespace: eeaa8bff-98c3-4222-ae95-dd92275ec758 # 命令行注入 group: SHANJUPAY_GROUP # 聚合支付业务组 ext-config: - refresh: true data-id: spring-boot-http.yaml # spring boot http配置 group: COMMON_GROUP # 通用配置组 - refresh: true data-id: spring-boot-starter-druid.yaml # spring boot starter druid配置 group: COMMON_GROUP # 通用配置组 - refresh: true data-id: spring-boot-mybatis-plus.yaml # spring boot mybatisplus配置 group: COMMON_GROUP # 通用配置组 #SpringMVC上传文件配置 servlet: multipart: #默认支持文件上传. enabled: true #支持文件写入磁盘. file-size-threshold: 0 # 上传文件的临时目录 location: # 最大支持文件大小 max-file-size: 1MB # 最大支持请求大小 max-request-size: 30MB dubbo: scan: # dubbo 服务扫描基准包 base-packages: com.shanjupay protocol: # dubbo 协议 name: dubbo port: 20890 registry: address: nacos://127.0.0.1:8848 application: qos: port: 22240 # dubbo qos端口配置 命令行注入 consumer: check: false timeout: 3000 retries: -1 logging: config: classpath: log4j2.xml
生成对应的entity、mapper
在nacos中新建连接池Druid配置:spring-boot-starter-druid.yaml,Group为:COMMON_GROUP
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver‐class‐name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/shanjupay_merchant_service?useSSL=false&useUnicode=true&serverTimezone=GMT%2B8 username: root password: 123456 druid: initial‐size: 5 min‐idle: 5 max‐active: 20 max‐wait: 60000 time‐between‐eviction‐runs‐millis: 60000 min‐evictable‐idle‐time‐millis: 300000 validation‐query: SELECT 1 FROM DUAL test‐while‐idle: true test‐on‐borrow: true test‐on‐return: false pool‐prepared‐statements: true max‐pool‐prepared‐statement‐per‐connection‐size: 20 filter: stat: slow‐sql‐millis: 1 log‐slow‐sql: true filters: config,stat,wall,log4j2 web‐stat‐filter: enabled: true url‐pattern: /* exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" session‐stat‐enable: false session‐stat‐max‐count: 1000 principal‐cookie‐name: admin principal‐session‐name: admin profile‐enable: true stat‐view‐servlet: enabled: true url‐pattern: /druid/* allow: 127.0.0.1,192.168.163.1 deny: 192.168.211.1 reset‐enable: false login‐password: admin login‐username: admin aop‐patterns: com.shanjupay.*.service.*
在nacos中添加配置:spring-boot-mybatis-plus.yaml,Group为:COMMON_GROUP
mybatis‐plus: configuration: cache‐enabled: false map‐underscore‐to‐camel‐case: true global‐config: id‐type: 0 field‐strategy: 0 db‐column‐underline: true refresh‐mapper: true typeAliasesPackage: com.shanjupay.merchant.entity mapper‐locations: classpath:com/shanjupay/*/mapper/*.xml
添加分页和性能分析插件:MybatisPlusConfig
package com.shanjupay.merchant.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author Administrator * @version 1.0 **/ @Configuration @MapperScan("com.shanjupay.**.mapper") public class MybatisPlusConfig { /** * 分页插件,自动识别数据库类型 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } /** * 启用性能分析插件 */ @Bean public PerformanceInterceptor performanceInterceptor(){ return new PerformanceInterceptor(); } }
编写一个简单例子测试流程
package com.shanjupay.merchant.api.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @Data @ApiModel(value = "MerchantDTO", description = "商户信息") public class MerchantDTO implements Serializable { @ApiModelProperty("商户id") private Long id; @ApiModelProperty("企业名称") private String merchantName; @ApiModelProperty("企业编号") private Long merchantNo; @ApiModelProperty("企业地址") private String merchantAddress; @ApiModelProperty("行业类型") private String merchantType; @ApiModelProperty("营业执照") private String businessLicensesImg; @ApiModelProperty("法人身份证正面") private String idCardFrontImg; @ApiModelProperty("法人身份证反面") private String idCardAfterImg; @ApiModelProperty("联系人") private String username; @ApiModelProperty("密码") private String password; @ApiModelProperty("手机号,关联统一账号") private String mobile; @ApiModelProperty("联系人地址") private String contactsAddress; @ApiModelProperty("审核状态,0‐未申请,1‐已申请待审核,2‐审核通过,3‐审核拒绝") private String auditStatus; @ApiModelProperty("租户ID") private Long tenantId; }
启动服务测试:
成功
去nacos哪里看:
这里的项目主要是自己复习看,很多细节没说清楚
集成swgger2
在shanjupay-merchant-application工程的config包中添加一个Swagger配置类
package com.shanjupay.merchant.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @ConditionalOnProperty(prefix = "swagger",value = {"enable"},havingValue = "true") @EnableSwagger2 public class SwaggerConfiguration { @Bean public Docket buildDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInfo()) .select() // 要扫描的API(Controller)基础包 .apis(RequestHandlerSelectors.basePackage("com.shanjupay.merchant.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo buildApiInfo() { Contact contact = new Contact("开发者","",""); return new ApiInfoBuilder() .title("闪聚支付‐商户应用API文档") .description("") .contact(contact) .version("1.0.0").build(); } }
. 添加SpringMVC配置类:WebMvcConfig,让外部可直接访问Swagger文档
package com.shanjupay.merchant.config; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Component public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); // registry.addResourceHandler("/test/dove/*.jpeg").addResourceLocations("file:D:\\"); } }
重启,在需要使用swagger2的服务加上@EnableSwagger2注解即可使用(Swagger2回去找启动了@EnableSwagger2且使用了注解的接口等)http://localhost:57010/swagger-ui.html
总结
1、该系统是自己为复习看,会有些模糊,细节没说清楚。
2、本文主要可以学习的知识点:
- 2.1:日志系统log4j2的搭建
- 2.2:对外restful(springcloud)对内rpc(dubbo)的基本使用(将controller、service、serviceImpl+entity+mapper层分不同服务)
- 2.3:集成swagger2
- 2.4:nacos的注册中心、配置中心基本使用
3、虽说该系统写了部分实战内容,但为了更加系统,还是会对日志搭建、swagger2集成、nacos配置中心的使用进行其他文章的分析。
日志搭建:https://mp.csdn.net/console/editor/html/108536129
swagger2集成:https://blog.csdn.net/qq_35599414/article/details/108539906nacos配置中心的具体使用:
4、本文中遇到的一些错误:
- nacos的配置信息要导出到mysql时要用mysql5.6以上版本
- 当模块的maven依赖加载不了时可以将<dependencyManagement>先删除后等加载好了再加上去
- serviceImpl如果要用dubbo调用时要用
org.apache.dubbo.config.annotation.Service进行@Service的注解注入,在获取service对象时用@Reference注解获取
- 使用mysql5.7时建立连接时要加上:useSSL=false&serverTimezone = GMT%2B8 不然会报错
- 好了似乎就这几个需要注意的
5、下面会对该系统进行进一步记录