很多java的朋友學習新知識時候去百度,看了之后一知半解,不知道怎么操作,不知道到底什么什么東西,那么作為java碼農到底該怎么學習額
一 百度是對還是錯呢?
百度是一個萬能的工具,當然是對也是錯的,對於一些小知識,是可以百度的,但是例如學習springcloud,那么最好是進入官方文檔進行查看,可以清晰查看到當前版本信息
因為很多時候,在版本迭代時候出現問題,那么看官方文檔就可以很清晰知道這個問題。
那么問題來了,英文不好,怎么處理?
不用太擔心,可以使用翻譯工具:
可能有時候不准,但是我們作為程序員的應該知道如何處理,將不懂的單詞進行留意,再去看文檔。
二 看文檔搭建eureka注冊中心:
首先進入springcloud官網,eureka是netlex公司開發的,所以進入找相關模塊,當然也有阿里巴巴的,
再找模塊
Service Discovery: Eureka Server
相信大家知道這個什么意思了,服務發現,eureka服務端
我們可以使用idea去創建項目,
主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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>springrurekaserver</module> </modules> <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.cxy</groupId> <artifactId>springcloudlearning</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springcloudlearning</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> <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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <!--<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories>--> </project>
<!--<repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories>-->
這個部分為什么注釋呢,由於在選版本時候,idea自己給我選擇了版本,所以帶出來了,官網這個不安全的版本。
然后參照官方:
引入依賴,所以這里就引入依賴:
然后再創建application。yml
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/
然后再創建
package com.cxy; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootVersion; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { new SpringApplicationBuilder(EurekaApplication.class) // .web(WebApplicationType.SERVLET) .main(SpringBootVersion.class) .run(args); /* SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(EnableEurekaServer.class); SpringApplicationBuilder web = springApplicationBuilder.web(webappl); web.run(args); */ SpringApplication.run(EurekaApplication.class,args); } }
可以看下官方:
其實在那個web方法地方的時候會報錯,所以我們需要點進源碼看下:
傳入了一個webApplicationType
這個是什么東西呢:
/* * Copyright 2012-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.boot; import org.springframework.util.ClassUtils; /** * An enumeration of possible types of web application. * * @author Andy Wilkinson * @author Brian Clozel * @since 2.0.0 */ public enum WebApplicationType { /** * The application should not run as a web application and should not start an * embedded web server. */ NONE, /** * The application should run as a servlet-based web application and should start an * embedded servlet web server. */ SERVLET, /** * The application should run as a reactive web application and should start an * embedded reactive web server. */ REACTIVE; private static final String[] SERVLET_INDICATOR_CLASSES = { "javax.servlet.Servlet", "org.springframework.web.context.ConfigurableWebApplicationContext" }; private static final String WEBMVC_INDICATOR_CLASS = "org.springframework." + "web.servlet.DispatcherServlet"; private static final String WEBFLUX_INDICATOR_CLASS = "org." + "springframework.web.reactive.DispatcherHandler"; private static final String JERSEY_INDICATOR_CLASS = "org.glassfish.jersey.servlet.ServletContainer"; private static final String SERVLET_APPLICATION_CONTEXT_CLASS = "org.springframework.web.context.WebApplicationContext"; private static final String REACTIVE_APPLICATION_CONTEXT_CLASS = "org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext"; static WebApplicationType deduceFromClasspath() { if (ClassUtils.isPresent(WEBFLUX_INDICATOR_CLASS, null) && !ClassUtils.isPresent(WEBMVC_INDICATOR_CLASS, null) && !ClassUtils.isPresent(JERSEY_INDICATOR_CLASS, null)) { return WebApplicationType.REACTIVE; } for (String className : SERVLET_INDICATOR_CLASSES) { if (!ClassUtils.isPresent(className, null)) { return WebApplicationType.NONE; } } return WebApplicationType.SERVLET; } static WebApplicationType deduceFromApplicationContext(Class<?> applicationContextClass) { if (isAssignable(SERVLET_APPLICATION_CONTEXT_CLASS, applicationContextClass)) { return WebApplicationType.SERVLET; } if (isAssignable(REACTIVE_APPLICATION_CONTEXT_CLASS, applicationContextClass)) { return WebApplicationType.REACTIVE; } return WebApplicationType.NONE; } private static boolean isAssignable(String target, Class<?> type) { try { return ClassUtils.resolveClassName(target, null).isAssignableFrom(type); } catch (Throwable ex) { return false; } } }
枚舉類,所以看下注釋:
找到了第二種,可以看下,所以傳入這個類型,
當然也可以采用其他方式進行:
例如:
官方啟動會構建很多東西,可以加載spring的版本,還有配置,這些: