为了便于管理,将所有项目放在一个工程中维护。
创建parent工程
首先,new一个Project,选择maven,注意不要勾选create from archetype
,填写GroupId、ArtifactId、Project name。创建完成后,将src目录删除。
配置pom文件,添加SpringCloud依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <packaging>pom</packaging>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> </parent>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RC2</spring-cloud.version> </properties>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
|
创建Eureka注册中心
创建一个新的Module,选择Spring Initializr,填写GroupId、ArtifactId、Name,选择Cloud Discovery - Eureka Server,命名Module Name,完成。
创建后会自动在parent
的pom中添加模块,如果没有,手动添加,如下:
1 2 3 4
| <modules> <module>eureka-server</module> <module>service</module> </modules>
|
编辑该模块中的pom文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <parent> <groupId>com.woniu</groupId> <artifactId>springcloud-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent>
<modelVersion>4.0.0</modelVersion> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging>
<name>eureka-server</name> <description>Eureka-Server</description>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
|
对应Application类添加注解:
1 2 3 4 5 6 7 8
| @SpringBootApplication @EnableEurekaServer public class EurekaServersApplication {
public static void main(String[] args) { SpringApplication.run(EurekaServersApplication.class, args); } }
|
编辑application.yml配置文件:
1 2 3 4 5 6 7 8 9 10 11
| server: port: 8081 eureka: instance: hostname: localhost # 该server默认同时也是client client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http:
|
创建服务
创建一个新的Module,仍然选择Maven,勾选create from archetype
,并选择quickstart,填写ArtifactId、Module Name,创建完成。
修改pom文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <parent> <artifactId>springcloud-parent</artifactId> <groupId>com.woniu</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>service</artifactId> <name>service</name> <packaging>jar</packaging>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
|
在main下面创建resources目录,该目录下创建application.yml文件:
1 2 3 4 5 6 7 8 9
| spring: application: name: service eureka: client: serviceUrl: defaultZone: http://localhost:8081/eureka/ server: port: 8082
|
在对应Application类添加注解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @SpringBootApplication @EnableEurekaClient @RestController public class ServiceApplication { @GetMapping("/hello") public String service(){ return "world"; } public static void main( String[] args ) { SpringApplication.run(ServiceApplication.class, args); } }
|
最后依次启动eureka-server、service服务,访问localhost:8081,访问成功。
@EnableDiscoveryClient、@EnableEurekaClient区别:
@EnableDiscoveryClient基于spring-cloud-commons,其discovery service有多种实现,Eureka、Consul、Zookeeper等。而@EnableEurekaClient只针对spring-cloud-netflix服务;
@EnableEurekaClient实现中包含@EnableDiscoveryClient;