首先使用的java版本是java8、maven是3.6.1
0、父依赖选择为:引入这个的好处是其子工程引入依赖时可以不用写版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.8.RELEASE</version>
</parent>
1、提前定义一些版本属性
实验中发现这样定义后其实再引入依赖的时候就不用写版本了
<properties>
<!--spring cloud版本-->
<spring.cloud-version>Hoxton.SR9</spring.cloud-version>
<!--spring cloud alibaba版本-->
<alibaba.cloud-version>2.2.5.RELEASE</alibaba.cloud-version>
<!--jdk版本-->
<java.version>1.8</java.version>
<!--跳过测试-->
<skipTests>true</skipTests>
<lombok.version>1.18.8</lombok.version>
<knife4j.version>2.0.2</knife4j.version>
<mybatis.plus.version>3.1.1</mybatis.plus.version>
</properties>
@SpringBootApplication 所需要的依赖:注意此处可以忽略版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
@SpringBootTest、@Test所需依赖为:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
@Data、@NoArgsConstructor、@AllArgsConstructor、@EqualsAndHashCode、@Slf4j
需要安装的依赖为:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
@TableName、@TableId、@TableId、BaseMapper、@MapperScan、IService、QueryWrapper、Page、IPage
需要安装的依赖为:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
datasource: driver-class-name: com.mysql.jdbc.Driver配置mysql需要的依赖:
在pom.xml中添加如下依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在application.yml中添加数据库连接配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.211.136:3306/leadnews_admin?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=&serverTimezone=Asia/Shanghai
username: root
password: 123456
在启动类上添加mapper文件夹所在的路径
@MapperScan(basePackages = "com.jjw.mapper")
@Autowired、@GetMapping、@DeleteMapping、@PutMapping、@Service、@RestController、@CrossOrigin、@RequestMapping、@PostMapping、@RestControllerAdvice(对全局异常进行拦截的)、@ExceptionHandler(决定用那个异常进行处理的)上边这个spring-boot-starter-web依赖包里
@ApiModel(value = “AdUser”, description = “管理员用户信息表”) 加到类上、@ApiModelProperty(加到属性上) @Api(value = “MyTest”, tags =“测试案例”, description = “测试案例1”)加到controller中的类上的,@ApiOperation(value = “mytest”, notes = “进行测试的”, tags = “测试案例”)加到controller中的方法上的 swagger需要的依赖
<!--swagger-->
<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>
另外需要一个配合类,内容如下:
package com.jjw.config;
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;
import java.util.HashSet;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket buildDocket() {
HashSet<String> strings = new HashSet<>();
strings.add("application/json");
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInfo())
//设置返回值数据类型为json
.produces(strings)
.select()
// 要扫描的API(Controller)基础包
// 可以只扫到controller这个包即,com.jjw.controller
.apis(RequestHandlerSelectors.basePackage("com.jjw"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo buildApiInfo() {
Contact contact = new Contact("jjw","","");
return new ApiInfoBuilder()
.title("jjw-平台管理API文档")
.description("平台管理服务api")
.contact(contact)
.version("1.0.0").build();
}
}
打开方式:http://localhost:7000/swagger-ui.html
knife4j的依赖(效果是和swagger一样的但功能强大):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
配置类:
package com.jjw.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
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;
import java.util.HashSet;
@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Bean
public Docket buildDocket() {
HashSet<String> strings = new HashSet<>();
strings.add("application/json");
Docket docket=new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInfo())
//设置返回数据类型
.produces(strings)
//分组名称
.groupName("1.0")
.select()
//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.jjw.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
private ApiInfo buildApiInfo() {
Contact contact = new Contact("jjw","","");
return new ApiInfoBuilder()
.title("jjw-平台管理API文档")
.description("平台管理服务api")
.contact(contact)
.version("1.0.0").build();
}
}
其他参数的使用和swagger一样
@EnableDiscoveryClient//启用注册与发现
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
application:
name: leadnews-admin
profiles: dev
cloud:
nacos:
server-addr: 192.168.211.136:8848
discovery:
server-addr: ${spring.cloud.nacos.server-addr}
jwt
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
spring-cloud-starter-gateway
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
这里边需要注意的是如果,引入此依赖,并且此服务中用到其他的服务中的包,且其他服务中的包又引入或者包含spring-boot-starter-web这个依赖,则需要将其排除掉,例如:
<dependency>
<groupId>com.jjw</groupId>
<artifactId>result-content</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
<!--要排除spring-boot-starter-web这个依赖,但是result-content中包含的swagger-content这个
依赖又依赖于spring-boot-starter-web,而我只需要result-content中的内容,所以将这两个依赖都排除了-->
<exclusion>
<groupId>com.jjw</groupId>
<artifactId>swagger-content</artifactId>
</exclusion>
</exclusions>
</dependency>
@EnableFeignClients、@FeignClient(name=“leadnews-admin”,path = “/admin”)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
默认的feign调用httpUrlConnection每次都会创建一个链接对象。效率较低。所以使用okhttp来替换,它可以使用连接池。调用效率较高。(不用也行,他只是起到提高效率的作用)
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
在需要用到feign的微服务中配置如下即可:
feign:
client:
config:
default: # default指定的是所有的 被调用方 都设置为该配置超时时间,可以设置为某一个微服务对应的服务名
connectTimeout: 5000 # 链接超时时间
readTimeout: 5000 # 读取的超时时间
okhttp:
enabled: true
httpclient:
enabled: false
fastdfs
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.5</version>
</dependency>
单独测试时只需要在yml中有如下配置即可:
fdfs:
so-timeout: 1501
connect-timeout: 601
thumb-image: #缩略图生成参数
width: 150
height: 150
tracker-list: #TrackerList参数,支持多个
- 192.168.211.136:22122
多个服务一起配置的话很有可能需要多一个数据库方面的配置如下:
spring:
profiles:
active: dev
---
server:
port: 9005
spring:
application:
name: leadnews-dfs
profiles: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.211.136:3306/你的数据库名称?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=&serverTimezone=Asia/Shanghai
username: root
password: 123456
cloud:
nacos:
server-addr: 192.168.211.136:8848
discovery:
server-addr: ${spring.cloud.nacos.server-addr}
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
# fastdfs的配置
fdfs:
so-timeout: 1501
connect-timeout: 601
thumb-image: #缩略图生成参数
width: 150
height: 150
tracker-list:
- 192.168.211.136:22122 #TrackerList参数,支持多个
web-server-url: http://192.168.211.136/ # 设置前缀路径
logging:
level.com: debug
fastjson的使用点击查看具体使用过程
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
kafka的 只需在消费者中使用这个@KafkaListener(topics = {“jjw”})
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
# 配置,yml中
spring:
kafka:
# 配置连接到服务端集群的配置项 ip:port,ip:port
bootstrap-servers: 192.168.211.136:9092
consumer:
# auto-commit-interval: 100
auto-offset-reset: earliest
# enable-auto-commit: true
group-id: test-consumer-group # 控制是否按组接收消息
# 默认值即为字符串
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# 默认值即为字符串
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
batch-size: 16384
buffer-memory: 33554432
key-serializer: org.apache.kafka.common.serialization.StringSerializer
retries: 0
value-serializer: org.apache.kafka.common.serialization.StringSerializer
xxl-job-core定时任务:@XxlJob(value=“teskTask”)
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.2</version>
</dependency>
elasticsearch @Document(indexName = “article”)、@Id、
@Field(type = FieldType.Text, index = true,analyzer = “ik_smart”, searchAnalyzer = “ik_smart”)
解释如下:
- Field:注解用于建立ES中的字段的映射
- type:指定该字段的数据类型
- index: 标识是否要索引,默认是true
- analyzer:指定建立倒排索引的时候使用的分词器
- searchAnalyzer:指定搜索的时候使用的分词器,这个可以不用设置,如果不设置则默认和analyzer使用同一个分词器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
yml中和cloud平级
elasticsearch:
rest:
uris:
- http://192.168.211.136:9200
kafka streams
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>2.5.1</version>
</dependency>