IDEA SpringCloud项目搭建
1.首先创建一个普通的maven项目用于管理依赖
2.使用创建数据库并使用idea连接数据库
3.导入POM依赖包,并根据数据库写出相应的API的module
<!--打包方式pom-->
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
这里的@Data 注解是set和get方法,@NoArgsConstructor 注解是无参构造,这两个注解都是上边依赖包中的。
@Data
@NoArgsConstructor
//链式编程注解
@Accessors
public class Dept implements Serializable {
private Long deptno;
private String dname;
//一个服务对应一个数据库
private String db_source;
public Dept(Long deptno, String dname, String db_source) {
this.deptno = deptno;
this.dname = dname;
this.db_source = db_source;
}
}
4.写一个springcloud的重要组件eureka,相当于一个监控中心,项目名springcloud-eureka-7001
1.第一步导入pom依赖
//这个就是eureka的依赖,第二个是热部署
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
2.在resources下面配置application.yml,具体内容如下
server:
port: 7001
eureka:
instance:
#eureka服务端的名字
hostname: localhost
client:
#表示是否向服务中心注册自己
register-with-eureka: false
#表示自己为注册中心
fetch-registry: false
service-url:
#监控页面
defaultZone: http://localhost:7001/eureka/
@SpringBootApplication
//Eureka开启的注解
@EnableEurekaServer
public class EurekaServer_7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaServer_7001.class,args);
}
}
启动类
http://localhost:7001/ 去访问
5.写一个服务提供者module–>(springcloud-provider-dept-8001),导入所需要的依赖
//把上面的API包拿到
<dependencies>
<dependency>
<groupId>com.wang</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
//mysql驱动依赖拿到
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
//druid数据源依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
//mybatis依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--监控中心服务的信息-->
//这个目前还用不到
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
//热部署依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
//相当与tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
//springcloud依赖中的EUREKA 注册中心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
1.类似于mybatis实现增删改查操作,运行自己的controller保证自己的环境正常,可以运行。
2.重点在application.yml,全部内容如下
server:
port: 8001
mybatis:
type-aliases-package: com.wang.springcloud.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
spring:
application:
name: springcloud-provider-dept-8001
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
#配置eureka服务注入到监控中心
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
#修改注册中心名字
instance:
instance-id: springcloud-provider-dept8001
info:
app.name: springcloud
company.name: 中北大学
接下来启动7001,等待运行完,启动8001,可以看到,服务已经注册到了
接下来客户端怎么去在注册中心拿到服务呢?springcloud-consumer-dept-80
导入依赖
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.wang</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
```java
@Configuration
public class RestTemplatePro {
@Bean
//基于客户端实现负载均衡
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
@RestController
public class DeptConsumerController {
//消费者不应该有service层
//RestTemplate 供我们直接调用
@Autowired
private RestTemplate restTemplate;//提供多种便捷访问远程http的方法
//private static final String REST_URL_PREFIX = "http://localhost:8001";
//获得项目的服务的名字,对应注册中心的名字
private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT-8001";
@RequestMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") long id){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
}
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept){
return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,boolean.class);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> list(){
return restTemplate.getForObject(REST_URL_PREFIX+"/start",List.class);
}
}
在配置一个启动类
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer_80.class,args);
}
}
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
端口号80 访问地址不用写
这里解释一下,你访问你原先的provider-service层是:locahost:8080/consumer/dept/list
如果没有注册中心的话,你的客户端(80)访问 locahost:/consumer/dept/list
private static final String REST_URL_PREFIX = “http://localhost:8001”;
restTemplate.getForObject(REST_URL_PREFIX+"/start",List.class);
这个方法就会执行,我觉得相当于是在服务端拿到的信息,客户端通过http获得服务端的信息
注册注册中心eureka,REST_URL_PREFIX,为了其他服务提供者使用,所以要修改名字。
(随后还会继续更新springcloud的其他组件,负载均衡服务熔断降级,路由网关)