创建个主项目maven
pom.xml导入依赖
<!-- 依赖版本 -->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<druid.version>1.2.5</druid.version>
<mysql.version>5.1.49</mysql.version>
<junit.version>4.12</junit.version>
<lombok.version>1.16.10</lombok.version>
<log4j.version>1.2.17</log4j.version>
<logback.version>1.2.3</logback.version>
</properties>
<!-- 总项目,依赖管理 -->
<dependencyManagement>
<dependencies>
<!-- spring cloud 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mysql -->
<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>1.3.2</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
创建公共模块cloud-api
pom.xml导入依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
创建测试实体
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain=true)
public class User implements Serializable {
private String id;
private String name;
private String sex;
private Date birthday;
}
创建服务提供方(生产者)
pom.xml导入依赖
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>cloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
application.yml
spring:
application:
name: provider-8000
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db03?useUnicode=true&characterEncoding=utf-8
username: root
password: 123456
# mybatis 配置
mybatis:
type-aliases-package: com.wxk.api.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/UserMapper.xml
server:
port: 8000
mybatis文件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
实体mybatis.xml —— UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wxk.provider.dao.UserDao">
<insert id="addUser" parameterType="User">
insert into user (id,name,sex,birthday)
values (uuid(),#{name},#{sex},#{birthday})
</insert>
<select id="queryByName" parameterType="string" resultType="User">
select * from user where name = #{name}
</select>
</mapper>
UserDao.java
@Mapper
@Repository
public interface UserDao {
void addUser(User User);
User queryByName(String name);
}
UserService.java
public interface UserService {
void addUser(User user);
User queryByName(String name);
}
UserServiceImpl.java
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void addUser(User user) {
userDao.addUser(user);
}
@Override
public User queryByName(String name) {
return userDao.queryByName(name);
}
}
UserController.java
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("addUser")
public String addUser(){
User user = new User();
user.setName("wxk").setSex("男").setBirthday(new Date());
userService.addUser(user);
return "成功";
}
@GetMapping("queryByName")
public User queryByName(String name){
User user = userService.queryByName(name);
return user;
}
}
启动类
@SpringBootApplication
public class Provider8000 {
public static void main(String[] args) {
SpringApplication.run(Provider8000.class,args);
}
}
创建服务调用方(消费者)
pom.xml
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>cloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 80
BeanConfig.java 加入RestTemplate bean对象
@Configuration
public class BeanConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
ConsumeController.java
@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
private static final String URL = "http://localhost:8000/user/";
@RequestMapping("queryByName")
public User queryByName(String name){
User user = restTemplate.getForObject(URL + "queryByName?name="+name, User.class);
return user;
}
}
启动类
@SpringBootApplication
public class Consumer80 {
public static void main(String[] args) {
SpringApplication.run(Consumer80.class,args);
}
}
Euraka 服务注册中心,用于定位服务,监控服务
pom.xml依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 7000
eureka:
instance:
hostname: localhost # 服务实例
client:
register-with-eureka: false #是否要在eureka注册中心注册,自己本身不用注册
fetch-registry: false #false 表示自己时注册中心
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动类
@SpringBootApplication
@EnableEurekaServer
public class Eureka7000 {
public static void main(String[] args) {
SpringApplication.run(Eureka7000.class,args);
}
}
访问地址:http://localhost:7000/
服务注册,在服务提供方上加配置
在上面项目cloud-provider-8000 pom.xml加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
eureka:
instance:
instance-id: provider8000 # eureka界面的服务描述
hostname: localhost
client:
service-url:
defaultZone: http://${eureka.instance.hostname}:7000/eureka/ #服务注册中心地址
在启动类加入注解@EnableEurekaClient
Feign声明式的web service客户端
公共模块cloud-api添加feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
添加调用接口
UserFeignClient
@FeignClient(value = "PROVIDER-8000")//eureka服务名
public interface UserFeignClient {
@GetMapping("user/queryByName/{name}")//服务url
public User queryByName(@PathVariable("name") String name);
}
创建feign调用客户端项目
引入依赖pom.xml
<dependency>
<groupId>org.example</groupId>
<artifactId>cloud-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>
<!-- ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- Eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
application.yml
server:
port: 9000
#eureka ribbon 配置
eureka:
client:
register-with-eureka: false #不向eureka中注册自己
service-url:
defaultZone: http://127.0.0.1:7000/eureka/
启动类FeignClient9000
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.wxk.cloud"})
public class FeignClient9000 {
public static void main(String[] args) {
SpringApplication.run(FeignClient9000.class,args);
}
}
服务调用controller
@RestController
@RequestMapping("feign")
public class FeignController {
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("queryByName/{name}")
public User queryByName(@PathVariable("name") String name){
return userFeignClient.queryByName(name);
}
}
后续继续更新