①springcloud功能域和官网资料介绍。
springcloud能干嘛?:
Distributed/versioned configuration(分布式/版本控制配置)
Service registration and discovery(服务注册与发现)
Routing(路由)
Service-to-service calls(服务到服务的调用)
Load balancing(负载均衡配置)
Circuit Breakers(断路器)
Distributed messaging(分布式消息管理)
。。。。。。。。。
springcloud去哪里下载资料:
官网:http://projects.spring.io/spring-cloud/
参考书:
https://springcloud.cc/spring-cloud-netflix.html、
本次开发API说明:http://cloud.spring.io/spring-cloud-static/Dalston.SR1/、https://springcloud.cc/spring-cloud-dalston.html
springcloud中国社区:http://springcloud.cn/
springcloud中文网:https://springcloud.cc/
springcloud该注意哪些方面呢?
服务的注册与发现(Eureka)
服务消费者(rest+Ribbon)
服务消费者(Feign)
断路器(Hystrix)
断路器监控(Hystrix Dashboard)
路由网关(Zuul)
分布式配置中心(Spring Cloud Config)
消息总线(Spring Cloud Bus)
服务链路追踪(Spring Cloud Sleuth)
。。。。。。
②springcloud使用情况。
新公司用的比较多。
③Rest微服务案例父工程构建步骤。
看下图,选择Working Sets逻辑视图。
新建microservicecloud,整体父工程Project。
新建父工程microservicecloud,切记是Packageing是pom模式。
主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类。
看上图,pom.xml文件的内容是:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lss.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后查看progress,需要等待进度条完成。
④Rest微服务案例API公共模块和部门Entity步骤。
新建microservicecloud-api,公共子模块Module。
等待进度条完成:
然后卡住了。在配置文件更改:
更改maven安装目录/conf/sessing.xml文件,在<mirros>标签中加上:
<mirror>
<id>centralMaven</id>
<mirrorOf>central</mirrorOf>
<name>central maven</name>
<url>http://central.maven.org/maven2/</url>
</mirror>
java程序中加入@SuppressWarnings("serial")是什么意思?
比如有个类实现了java.io.Serialize接口:
package com.onede4.test;
public class TestSerial implements java.io.Serializable {
}
如果代码仅仅写上这样,放在eclipse里会给你提示一个黄色的警告,为啥呢,就是因为,你实现了Serializable 接口,但是没有给出
private static final long serialVersionUID = 5952689219411916553L;
类似这样的私有字段(这个字段是实现了Serializable接口需要的,但不必须)
只要加上类似这样的一个字段,黄色警告就会消失,但是你如果就是不想加这个字段,同时还不想看到那个黄色的警告,没问题,那就要在类上加一个注解(@SuppressWarnings("serial"))
package com.onede4.test;
@SuppressWarnings("serial")
public class TestSerial implements java.io.Serializable {
}
这样eclipse就不会有那个黄色的警告了
不过我们还是推荐给出private static final long serialVersionUID = 5952689219411916553L;
当你的类进行序列化和反序列化操作的时候如果没有这个字段可能会出问题,所以尽量加上这个字段,不要用@SuppressWarnings("serial")注解。
java程序中加入@Data是什么意思?
@Data注解中包含了get,set和toString,所以我们直接在实体类中是@Data注解就可以免了再去手动创建这步骤了。
有了@Data注解,就可以不用手动生成get、set方法,和toString方法了。即不用执行上图操作。
module创建完成后出现两个变化,一个是文件目录变化,一个是父工程的pom文件变化。
约定 > 配置 > 编码
microservicecloud-api的pom.xml文件内容是:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent><!-- 子类里面显示声明才能有明确的继承表现,无意外就是父类的默认版本否则自己定义 -->
<groupId>com.lss.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>microservicecloud-api</artifactId><!-- 当前Module我自己叫什么名字 -->
<dependencies><!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
然后update一下。
再创建entity。
生成全参构造方法:
然后生成无参即空参构造方法:
然后生成set、get方法:
生成toString方法:
生成全参构造函数、生成空参构造函数、生成get,set方法、生成toString方法,均是垃圾操作,可以用lombok,进行注释,自动生成。而且可能,中途增加字段,或者删除字段。那我们如果不用lombok,则又要手动增减和删除相关内容。十分麻烦。那么这个时候用到lombok。
所以全部删除:然后变为:
@AllArgsConstructor生成一个全参构造函数,相当于:
public Dept(Long deptno, String dname, String db_source) {
super();
this.deptno = deptno;
this.dname = dname;
this.db_source = db_source;
}
此时只有三个参数,后期增加和删除参数,也不用手动更改了,只要有@AllArgsConstructor,后期删除和增加类的属性,全参构造函数也会自动删除和增加参数 。
@NoArgsConstructor生成一个基本的空参构造函数,相当于:
public Dept() {
super();
}
@Data,相当于自动生成get、set方法,和toString方法。此时@Data部分相当于以下内容:
public Long getDeptno() {
return deptno;
}
public void setDeptno(Long deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getDb_source() {
return db_source;
}
public void setDb_source(String db_source) {
this.db_source = db_source;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", "
+ "db_source=" + db_source + "]";
}
当后期类的属性值增加或者减少时,如果用了@Data,就不用了手动去增加和删除set、get和toString方法,equals方法,hashCode方法了。@Data会自动增加或者删除相关内容。
但此时发现:@AllArgsConstructor @NoArgsConstructor @Data注解失效,没有作用。
使用了一下Lombok中的三个注解,
@AllArgsConstructor @NoArgsConstructor @Data
但是发现我的代码中一直都有问题,定义的三个变量也一直都有警告,并且查看Outline,这三个注解对于的方法没有生成,
原来是lombok包没有安装。才知道原来lombok是要安装,本以为只需要在pom.xml文件中引用一下就行了。
因为之前已经在pom.xml中添加了lombok的依赖,本地已经下载好了lombok的jar包,直接到本地maven仓库去找。
将lombok-1.16.18.jar直接copy一份到eclipse的安装目录下
打开cmd窗口,执行以下命令:
打开以下文件,发现:
多了一行:
重启eclipse
发现lombok生效!!
这个时候做一个测试。把全参构造函数去掉,即去掉@AllArgsConstructor。然后自己构造一个单参构造函数。
dept.setDeptno(11L).setDname("RD").setDb_source("DB01");
以上是链式写法。因为@Accessors(chain=true),所以可以这样写。
因为写了@Data,所以可以有set,get,toString,equals,hashCode等方法。虽然在函数里面没写。但这就是lombok,小辣椒的好处,自动生成,当属性改变时,自动增加或删除相关方法内容。
然后执行:
第一步:maven clean,让这个工程重新在本地库生成最新的jar包。
第二步:maven install,在本地重新安装一下刚刚重新生成的jar包。
<dependency>
<groupId>com.lss.springcloud</groupId>
<artifactId>microservicecloud-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
如果其他模块(微服务)要引入这个模块(微服务),则只需要在pom文件中引入上面这段话,即可。