程序需要高内聚,低耦合
如何构建微服务
一个大型系统的微服务架构,就像一个复杂交织的神经网络,每一个神经元就是一个功能元素,它们各自完成自己的功能,然后通过http互相请求调用,都被微化了,它们作为一个个服务器共同创建了一个庞大的系统。如果修改其中的一个功能,只需要更新升级其中一个功能服务单元即可。
但是这种庞大的系统架构给部署和运维带来很大的难度。于是,spring为我们带来了构建大型分布式微服务的全套、全程产品:
- 构建一个个功能独立的微服务应用单元,可以使用springboot,可以帮我们快速构建一个应用;
- 大型分布式网络服务的调用,这部分由spring cloud来完成,实现分布式;
- 在分布式中间,进行流式数据计算、批处理,我们有spring cloud data flow.
- spring 为我们想清楚了整个从开始构建应用到大型分布式应用全流程方案。
第一个SpringBoot程序
环境
- jdk1.8
- maven 3.6.1
- springboot: 最新版
- IDEA
**官方:提供了一个快速生成的网站!**https://start.spring.io/
IDEA集成了这个网站
我选的版本是8 如果出错的化调回11
运行出错 调回版本11
运行时出现的的错误:java: 警告: 源发行版 11 需要目标发行版 11
解决办法:
最后重启IDEA 我觉得只要这几个版本是一致的就应该都可以运行
- 可以在官网直接下载后,导入idea开发
- 直接使用idea创建一个springboot项目(一般开发直接在IDEA中创建)
pom.xml里面各部分代表的意思:
<?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>
<!-- 有一个父项目 spring-boot-starter-parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kuang</groupId>
<artifactId>helloworld1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helloworld1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<!-- web依赖:集成tomcat dispatcherServlet, xml ...-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring-boot-starter 所有的springboot依赖都使用这个开头的-->
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 打jar包插件 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
如上所示,主要有四个部分:
- 项目元数据信息:创建时候输入的Project Metadata部分,也就是Maven项目的基本元素,包括:groupId、artifactld、version、name、description等
- parent: 继承spring-boot-starter-parent的依赖管理,控制版本与打包内容
- dependencies"项目具体依赖,这里包含了spring-boot-starter=web用于实现HTTP接口(该依赖中包含了Spring MVC),官网对它的描述是:使用spring mvc 构建web(包括RESTful)应用程序的入门者,使用Tomcat作为默认嵌入式容器:spring-boot-starter-test用于编写单元测试的依赖包。
- build:构建配置部分,默认使用spring-boot-maven-plugin,配合spring-boot-starter-parent 就可以把Spring Boot应用打包成JAR来直接运行。
1.在同级目录下建包,否则识别不到:
2.在包中新建一个Controller类:
HelloController
package com.kuang.helloworld1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//springboot的核心原理是自动装配
@RestController
public class HelloController {
// 接口 : http://localhost:8080/hello
@RequestMapping("/hello")
public String hello(){
//调用业务,接受前端的参数
return "hello, World";
}
}
出现的错误:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project helloworld1: Fatal error compiling
解决办法
在pom.xml中添加以下代码:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
打包成功会有一个jar包:
在此页面点击shift + 鼠标右键显示在此打开powershell窗口。
**输入的命令:**java -jar.\helloworld1-0.0.1-SNAPSHOT.jar
出现的错误:Initialization failed for ‘https://start.spring.io’ Please check URL, network and proxy settings. Error message: Cannot download ‘https://start.spring.io’: connect timed out
解决办法:1
**解决方法2:更换为阿里云的 https://start.aliyun.com/ **
要使springboot运行完不结束 要在pom.xml中导入依赖:
<dependency>
<!--start启动器 版本号可以不要 会继承父依赖--> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
springboot运行时出的错:Web server failed to start. Port 8080 was already in use.
解决办法
把不用的那些idea 文件 或者与此项目无关的IDEA文件关掉 并且在maven 那里进行clean。就可以运行出来。
更改端口号:
application.properties:
# 更改项目端口号
server.port=8081
**图案制作地址:**https://www.bootschool.net/ascii-art