Spring Cloud Eureka------微服务的服务提供方

Spring Cloud Eureka服务提供方

微服务的服务注册中心------点击查看
关于服务提供方的一些通用代码,比如二级缓存配置、安全框架等后续在此博客更新

一、基于Spring Boot项目的POM依赖

主要依赖介绍:

  1. spring-cloud-starter为Spring Cloud的启动依赖(必须)
  2. spring-cloud-starter-netflix-eureka-server为Eureka服务依赖(必须)
  3. spring-boot-starter-web为Spring Web项目依赖(必须)
  4. mybatis-spring-boot-starter为MyBatis启动依赖
  5. spring-boot-starter-jdbc为Spring JDBC(用于事务管理)
  6. mysql-connector-java为Mysql数据库驱动依赖
  7. druid-spring-boot-starter为Druid数据库连接池
  8. spring-boot-starter-data-redis为Redis缓存数据库
  9. spring-boot-starter-actuator为项目状态监测依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.drsanjun</groupId>
	<artifactId>Drsanjun-Eureka-SystemServiceProvider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Drsanjun-Eureka-SystemServiceProvider</name>
	<description>系统服务中心</description>

	<properties>
		<!--JDK -->
		<java.version>1.8</java.version>
	</properties>
	<!-- Spring Cloud依赖管理 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Greenwich.SR3</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- Spring Cloud启动依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter</artifactId>
		</dependency>
		<!-- Spring Web启动依赖 (web项目) -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- Spring Eureka启动客户端依赖(服务注册客户端) -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<!-- Mybatis启动依赖 (持久层框架) -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.0</version>
		</dependency>
		<!-- Spring JDBC -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<!-- Mysql数据库驱动依赖 (数据库驱动) -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!-- Druid数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.10</version>
		</dependency>
		<!-- Redis数据库 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!-- Lombok依赖(简化实体类编写) -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- Spring Actuator启动依赖(状态监测) -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- Spring Test启动依赖(测试) -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- Spring Boot支持热启动 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- Spring Boot支持xml和properties配置 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- Quartz 定时任务框架 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-quartz</artifactId>
		</dependency>
		<!-- swagger接口的文档在线自动生成 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.9.2</version>
		</dependency>
		<!--由于2.9.2版的swagger默认使用1.5.20版本会有兼容性错误,所以这里单独引入1.5.22版本,你可以去掉这个然后看看具体的兼容性错误 -->
		<dependency>
			<groupId>io.swagger</groupId>
			<artifactId>swagger-models</artifactId>
			<version>1.5.22</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.9.2</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<!-- SpringBoot Maven插件 -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

二、Spring Boot主启动类

注解含义:

  1. @SpringBootApplication表示该类为主程序入口(必须)
  2. @EnableDiscoveryClient开启服务客户端功能(必须)
  3. @EnableSwagger2开启Swagger2测试接口功能
  4. @MapperScan(“com.drsanjun.mapper”)为mapper接口扫描
  5. @ServletComponentScan激活Servlet、Filter、Listener的组件扫描
  6. @EnableScheduling开启定时任务
package com.drsanjun;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@MapperScan("com.drsanjun.mapper")
@EnableSwagger2
@EnableScheduling
@EnableDiscoveryClient
@ServletComponentScan
public class EurekaSystemServiceProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaSystemServiceProviderApplication.class, args);
	}
}

三、配置详解

#服务名
spring.application.name=sm-provider
#端口号
server.port=9000
#错误转发路径
server.error.path=/error
#服务注册中心地址
eureka.client.service-url.defaultZone=http://drsanjun:123456@localhost:7111/eureka/
#Jackson时间格式化全局配置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#Mysql驱动配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#Mybatis配置
mybatis.configuration.cache-enabled=true
mybatis.configuration.lazy-loading-enabled=false
mybatis.configuration.aggressive-lazy-loading=true
mybatis.configuration.multiple-result-sets-enabled=true
mybatis.configuration.use-column-label=true
mybatis.configuration.use-generated-keys=false
mybatis.configuration.auto-mapping-behavior=PARTIAL
mybatis.configuration.default-executor-type=SIMPLE
mybatis.configuration.map-underscore-to-camel-case= true
mybatis.configuration.local-cache-scope=SESSION
mybatis.configuration.jdbc-type-for-null=NULL
mybatis.type-aliases-package= com.drsanjun.pojo.entity
mybatis.mapper-locations=classpath:mapper/*.xml
#Druid数据库连接池配置
spring.datasource.druid.url= jdbc:mysql://127.0.0.1:3306/dbbase?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false
spring.datasource.druid.username= root
spring.datasource.druid.password= 
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.initial-size=10
spring.datasource.druid.max-active=150
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-wait=60000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=25200000
spring.datasource.druid.remove-abandoned=false
spring.datasource.druid.remove-abandoned-timeout=7200
spring.datasource.druid.log-abandoned=true
spring.datasource.druid.filters=mergeStat
#Tomcat相关配置
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=logs
#日志配置
logging.level.root=info
logging.level.org=warn
logging.level.com.drsanjun=debug
#缓存策略相关配置
spring.cache.type=REDIS
spring.cache.cache-names=user
spring.cache.redis.time-to-live=600000
#Redis缓存数据库配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8

附一个Swagger2的配置

package com.drsanjun.configuration;

import java.util.ArrayList;
import java.util.List;
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.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger2配置类
 * 
 * @author dyw
 * @date 2019年9月18日
 */
@Configuration
public class Swagger2Config {
	@Bean
	public Docket api() {
		return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).build()
				.apiInfo(apiInfo()).securityContexts(securityContexts()).securitySchemes(securitySchemes());
	}

	private ApiInfo apiInfo() {

		Contact contact = new Contact("Hutool工具集使用参考文档", "https://www.hutool.cn/docs/#/", null);
		return new ApiInfoBuilder()

				.title("SystemService-Consumer接口测试")

				.description("完美主义者常常因试图努力把一件事做到极致而放弃对新领域的尝试。")

				.version("1.0.0")

				.contact(contact).build();
	}

	private List<ApiKey> securitySchemes() {
		List<ApiKey> apiKeyList = new ArrayList<>();
		apiKeyList.add(new ApiKey("token", "token", "header"));
		return apiKeyList;
	}

	private List<SecurityContext> securityContexts() {
		List<SecurityContext> securityContexts = new ArrayList<>();
		securityContexts.add(SecurityContext.builder().securityReferences(defaultAuth())
				.forPaths(PathSelectors.regex("^(?!auth).*$")).build());
		return securityContexts;
	}

	List<SecurityReference> defaultAuth() {
		AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
		AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
		authorizationScopes[0] = authorizationScope;
		List<SecurityReference> securityReferences = new ArrayList<>();
		securityReferences.add(new SecurityReference("token", authorizationScopes));
		return securityReferences;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豢龙先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值