1、下载
这里提供了下载的地址,与相关配置
可以到官网下载
2、启动服务
打开控制台,运行
consul agent -dev
这是正常显示页面
3、配置springcloud依赖
父类pom.xml包
<properties>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>
<mysql.version>8.0.26</mysql.version>
<mybatis.version>2.2.0</mybatis.version>
<druid.version>1.2.3</druid.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
4、 配置Consul-provider
实体类:
import java.util.Date;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* (Movie)实体类
*
* @author makejava
* @since 2021-12-17 09:12:14
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "movie")
public class Movie implements Serializable {
private static final long serialVersionUID = -30737887108345962L;
@Id
private Integer id;
private String movieName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date movieData;
}
mapper 使用了tk.mapper
import com.ycz.springCloud.entity.Movie;
import org.apache.ibatis.annotations.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* (Movie)表数据库访问层
*
* @author makejava
* @since 2021-12-17 09:12:13
*/
@Mapper
public interface MovieMapper extends tk.mybatis.mapper.common.Mapper<Movie>,MySqlMapper<Movie> {
}
service:
/**
* (Movie)表服务接口
*
* @author makejava
* @since 2021-12-17 09:12:14
*/
public interface MovieService {
Object getAll();
Object getOne(Integer id);
}
serviceImpl:
import com.ycz.springCloud.mapper.MovieMapper;
import com.ycz.springCloud.service.MovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* (Movie)表服务实现类
*
* @author makejava
* @since 2021-12-17 09:12:15
*/
@Service("movieService")
public class MovieServiceImpl implements MovieService {
@Autowired
private MovieMapper movieMapper;
public Object getAll() {
return movieMapper.selectAll();
}
public Object getOne(Integer id) {
return movieMapper.selectByPrimaryKey(id);
}
}
Controller:
import com.ycz.springCloud.service.MovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* (Movie)表控制层
*
* @author makejava
* @since 2021-12-17 09:12:12
*/
@RestController
@RequestMapping("movie")
public class MovieController {
/**
* 服务对象
*/
@Autowired
private MovieService movieService;
@RequestMapping("getAll")
public Object getAll(){
return movieService.getAll();
}
@RequestMapping("/getOne/{id}")
public Object getOne(@PathVariable Integer id){
return movieService.getOne(id);
}
}
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //开启客户端自动发现,注册到consul中
public class Consul8003 {
public static void main(String[] args) {
SpringApplication.run(Consul8003.class,args);
}
}
配置application.yaml
server:
port: 8003
spring:
application:
name: springcloud-concul-provider-8003
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db05?useUnicode=true
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
mybatis:
type-aliases-package: com.ycz.com.ycz.com.ycz.springCloud.entity
configuration:
map-underscore-to-camel-case: true
mapper-locations: classpath:mapper/*.xml
运行:
注册到consul中
正常!!!
5、Consul-consumer配置
pom.xml
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
ApplicationConfig
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
UserController:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private RestTemplate restTemplate;
private static final String REST_URL="http://springcloud-concul-provider-8003";
@RequestMapping("/getAll")
public Object getAll(){
ResponseEntity<Object> forEntity = restTemplate.getForEntity(REST_URL + "/movie/getAll", Object.class);
return forEntity;
}
@RequestMapping("/get/{id}")
public Object getOne(@PathVariable("id") Integer id){
ResponseEntity<Object> forEntity = restTemplate.getForEntity(REST_URL + "/movie/getOne/"+id, Object.class);
return forEntity;
}
}
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulConsumer9002 {
public static void main(String[] args) {
SpringApplication.run(ConsulConsumer9002.class,args);
}
}
application.yaml
server:
port: 9002
spring:
application:
name: Consul-Consumer-9002
cloud:
consul:
port: 8500
host: localhost
discovery:
service-name: ${spring.application.name} # 注册到consul注册中心的应用名称
启动的:
然后访问:
http://localhost:9002/user/getAll
正常:
http://localhost:9002/user/get/1