由于原有SpringCloud體系版本比較老,最初的注冊中心使用的Eureka后期官方無升級方案,配置中心無法在線管理配置,還有實(shí)時上下線的問題,因此需要將原有系統(tǒng)的Eureka服務(wù)升級Nacos注冊心服務(wù)。
原有版本SpringBoot1.5.15、SpringCloud E、注冊中心Eureka
升級后版本SpringBoot2.1.6、SpringCloud G、注冊中心Nacos1.4.2
1.升級springboot為2.x
注釋掉根目錄下的parent,和starter依賴。

注釋掉dependencyManagement下的platform-bom

?添加dependencyManagement的springboot依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency>
添加打包資源

<resources><!--如果不設(shè)置resource 會導(dǎo)致application.yml中的@@找不到pom文件中的配置--><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>
2.升級springcloud版本到Greenwich.SR2

并添加alibaba.cloud版本
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
3.替換掉Eureka注冊中心與配置中心

使用Undertow 替換內(nèi)置 Tomcat;
<!--使用Undertow 替換內(nèi)置 Tomcat--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency>
添加Nacos配置:
<!--阿里巴巴 nacos 服務(wù)發(fā)現(xiàn)--><!--注冊中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>${spring-cloud-alibaba.version}</version></dependency><!--配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>${spring-cloud-alibaba.version}</version></dependency>
?添加監(jiān)控相關(guān)引用
<!--配置文件處理器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--監(jiān)控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
升級Feign引用
<!--聲明式接口調(diào)用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
?SpringbootApplication啟動項(xiàng)中更新為
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplicationpublicclass JoinDerepeatApplication {
}
4.更改配置文件bootstrap.yml
根據(jù)自身服務(wù)更改下面內(nèi)容,${nacos-namespace:}這種寫法是為了運(yùn)行時可以由外部環(huán)境變量傳入,而不用更改配置重新打包發(fā)布。
server:
? port: 8123
? undertow:
? ? worker-threads: 1000
? ? io-threads: 32
? ? accesslog:
? ? ? enabled: true
? ? ? dir: /logs/${spring.application.name}
? ? ? pattern: '%t,${spring.application.name},%a,%A:%p,"%r",%s,%T,%b,%{i,Referer},"%{i,User-Agent}"'
spring:
? application:
? ? name: join-derepeat
? profiles:
? ? active: ${active:dev}
? cloud:
? ? #手動配置Bus id,
? ? bus:
? ? ? id: ${spring.application.name}:${server.port}
? main:
? ? allow-bean-definition-overriding: true
? #解決restful 404錯誤 spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false
? mvc:
? ? throw-exception-if-no-handler-found: true
? resources:
? ? add-mappings: false
management:
? endpoints:
? ? web:
? ? ? exposure:
? ? ? ? include: '*'
? endpoint:
? ? health:
? ? ? show-details: ALWAYS
#解決讀取配置文件中文亂碼
file:
? encoding: utf-8
---
spring:
? profiles: dev
? cloud:
? ? inetutils:
? ? ? preferred-networks: 10.2
? ? nacos:
? ? ? config:
? ? ? ? namespace:
? ? ? ? server-addr: 10.3.87.30:3105
? ? ? ? shared-configs[0]:
? ? ? ? ? data-id: common.properties
##? ? ? ? ? refresh: true
? ? ? ? shared-configs[1]:
? ? ? ? ? data-id: rabbitmq.properties
? ? ? discovery:
? ? ? ? namespace:
? ? ? ? server-addr: 10.3.87.30:3105
? ? ? ? metadata:
? ? ? ? ? version: ${project.version}
? ? ? ? ? description: ${project.description}
---
spring:
? profiles: prd
? cloud:
? ? nacos:
? ? ? config:
? ? ? ? namespace: ${nacos-namespace:}
? ? ? ? server-addr: ${config-server-addr}
? ? ? ? shared-configs[0]:
? ? ? ? ? data-id: common.properties
? ? ##? ? ? ? ? refresh: true
? ? ? ? shared-configs[1]:
? ? ? ? ? data-id: rabbitmq.properties
? ? ? discovery:
? ? ? ? namespace: ${nacos-namespace:}
? ? ? ? server-addr: ${discovery-server-addr}
? ? ? ? metadata:
? ? ? ? ? version: ${project.version}
? ? ? ? ? description: ${project.description}
5.配置文件
端口自定義,測試與正式環(huán)境配置shared-configs[0]? common.properties 本項(xiàng)目需要加載的配置文件內(nèi)容保存在Nacos中心。
refresh: true 設(shè)置為可以實(shí)時動態(tài)更新的配置文件

配置內(nèi)容示例

可以添加自已的配置文件?如添加join-derepeat.yml。
只需要繼續(xù)添加自己的配置文件shared-configs[2]配置即可。
最后啟動本服務(wù)
訪問接口頁面http://localhost:8123/doc.html調(diào)試即可。
6.Swagger-UI更換
<swagger2.version>2.9.0</swagger2.version><swagger-bootstrap-ui.version>1.9.5</swagger-bootstrap-ui.version>
<!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger2.version}</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>${swagger-bootstrap-ui.version}</version></dependency>
在config文件夾內(nèi)添加SwaggerConfig文件
將如下高亮更新為自己的程序內(nèi)容
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUIpublicclass SwaggerConfig {
? ? //swagger2的配置文件,這里可以配置swagger2的一些基本的內(nèi)容,比如掃描的包等等? ? @Bean
? ? public Docket createRestApi() {
? ? ? ? returnnew Docket(DocumentationType.SWAGGER_2)
? ? ? ? ? ? ? ? .apiInfo(apiInfo())
? ? ? ? ? ? ? ? .groupName("數(shù)據(jù)去重復(fù)")
? ? ? ? ? ? ? ? .select()
? ? ? ? ? ? ? ? //為當(dāng)前包路徑.apis(RequestHandlerSelectors.basePackage("com.join.derepeat.controller"))
? ? ? ? ? ? ? ? .paths(PathSelectors.any())
? ? ? ? ? ? ? ? .build();
? ? }
? ? //構(gòu)建 api文檔的詳細(xì)信息函數(shù),注意這里的注解引用的是哪個private ApiInfo apiInfo() {
? ? ? ? returnnew ApiInfoBuilder()
? ? ? ? ? ? ? ? //頁面標(biāo)題.title("數(shù)據(jù)去重復(fù) API")
? ? ? ? ? ? ? ? //創(chuàng)建人.contact(newContact("james", "", ""))
? ? ? ? ? ? ? ? //版本號.version("1.0")
? ? ? ? ? ? ? ? //描述.description("重復(fù)數(shù)據(jù)攔截")
? ? ? ? ? ? ? ? .build();
? ? }
}
7.更改鏡像打包pom文件
由于是采用Docker部署,因此需要打成docker鏡像,使用的是docker-maven-plugin插件。
添加容器倉庫地址
<docker.repostory>10.3.87.5:8080</docker.repostory>
添加
<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.1.1</version><configuration><!--覆蓋相同標(biāo)簽鏡像--><forceTags>true</forceTags><!-- 與maven配置文件settings.xml一致 --><serverId>nexus-releases</serverId><!--私有倉庫地址 --><registryUrl>https://${docker.repostory}</registryUrl><!--遠(yuǎn)程Docker地址 --><dockerHost>http://10.3.87.21:2345</dockerHost><!-- 注意imageName一定要是符合正則[a-z0-9-_.]的,否則構(gòu)建不會成功 --><!--指定鏡像名稱 倉庫/鏡像名:標(biāo)簽--><imageName>${docker.repostory}/${project.name}:${project.version}</imageName><baseImage>join:0.6</baseImage><maintainer>${project.description} admin</maintainer><env> <JAVA_OPTS> -Xms700m -Xmx700m</JAVA_OPTS></env><cmd>java $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/${project.build.finalName}-dump.hprof -jar /app/${project.build.finalName}.jar</cmd><resources><resource><!-- 指定要復(fù)制的目錄路徑,這里是當(dāng)前目錄 --><!-- 將打包文件放入dockerDirectory指定的位置 --><targetPath>/app/</targetPath><!-- 指定要復(fù)制的根目錄,這里是target目錄 --><directory>${project.build.directory}</directory><!-- 指定需要拷貝的文件,這里指最后生成的jar包 --><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>
小技巧:這里將jar運(yùn)行時設(shè)置的參數(shù)變量化<JAVA_OPTS>,方便在不重新編譯的情況下快速通過設(shè)置環(huán)境變量的方式添加一些想要的值。
以上就是在實(shí)戰(zhàn)中總結(jié)出來的配置經(jīng)驗(yàn)。