Feign+mybatisplus搭建项目遇到的坑及解决

 更新时间:2023年03月30日 14:18:47   作者:清淡看朝霞  
这篇文章主要介绍了Feign+mybatisplus搭建项目遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

出现的错误

1.Failed to bind properties under ‘spring.datasource’ to javax.sql.DataSource:

2.@org.springframework.beans.factory.annotation.Autowired(required=true)等

原因(简洁说明)

使用代码生成器的service层需要继承extends IService,这是一个坑,它不可以在接口工程中使用,实体类可以

如果想要使用mp的功能,就需要:

—— > 1.接口工程中创建无extends IService的接口 A

—— > 2.provider工程中放入代码生成的service层 接口B

—— > 3.provider工程的实现类需要 implements A,B

代码

接口工程

import com.study.seckill.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;

@Service
@FeignClient(value = "seckill-provider-localhost")
public interface IUserService /*extends IService<User>*/ {

    @RequestMapping(value = "/users",method = RequestMethod.GET)
    public List<User> quallAll();

}

接口工程依赖

<dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generate</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-extension</artifactId>
      <version>3.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
  </dependencies>

–注意不要有druid数据源依赖,可能会报sqlSession等异常–

consumer工程代码

controller

@RestController
public class UserConsumerController {

    @Autowired
    private IUserService iUserService;

    @GetMapping(value = "/users")
    public  String queryByName(){
        List<User> users = iUserService.quallAll();
        return users.toString();
    }
    
}

启动类

@EnableFeignClients(basePackages = {"com.study.seckill"})
@SpringBootApplication
@EnableEurekaClient
public class Seckill_Consumer_8080 {
    public static void main(String[] args) {
        SpringApplication.run(Seckill_Consumer_8080.class, args);
    }
}

consumer依赖

 <dependencies>
    <dependency>
      <groupId>com.study</groupId>
      <artifactId>seckill-api</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <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-eureka</artifactId>
      <version>1.4.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
    </dependency>
  </dependencies>

consumer的application.yml

server:
  port: 8080
#配置eureka
eureka:
  client:
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: seckill-consumer-8080
    prefer-ip-address: true
spring:
  application:
    name: seckill-consumer-8080

#开启降级
feign:
#  hystrix:
#    enabled: true

#feign客户端负载均衡策略
#seckill-provider-localhost:
#  ribbon:
#
##   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #配置规则 随机
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
##   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置规则 重试
##   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重
##   NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
#    ConnectTimeout: 5000 #请求连接超时时间
#    ReadTimeout: 10000 #请求处理的超时时间
#    OkToRetryOnAllOperations: true #对所有请求都进行重试
#    MaxAutoRetriesNextServer: 2 #切换实例的重试次数
#    MaxAutoRetries: 2 #对当前实例的重试次数

prodvider工程

如图:UserServiceImpl 需要实现这个UserService和IUserService

service层结构

import com.baomidou.mybatisplus.extension.service.IService;
import com.study.seckill.entity.User;
public interface UserService  extends IService<User> {
}
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.study.seckill.entity.User;
import com.study.seckill.mapper.UserMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.study.seckill.service.IUserService;
import com.study.seckill.service.UserService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService, UserService {

    @Override
    public List<User> quallAll() {
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        return baseMapper.selectList(null);
    }
}

provider的application.properties

mybatis-plus.type-aliases-package=com.study.seckill.entity
mybatis-plus.global.config.refresh-mapper=true
mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml

provider依赖

<dependencies>
    <dependency>
      <groupId>com.study</groupId>
      <artifactId>seckill-api</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>


    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.1.1</version>
    </dependency>
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>3.1.1</version>
    </dependency>
    <!--用来支持AR-->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generate</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-extension</artifactId>
      <version>3.1.1</version>
    </dependency>
    <!--自动生成模板-->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.29</version>
    </dependency>

    <!--连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-test</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

  </dependencies>

  <build>
    <!-- 添加资源 -->
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <!-- src/main/resources下的指定资源放行 -->
        <includes>
          <include>**/*.properties</include>
          <include>**/*.yml</include>
          <include>**/**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

provider工程需要配置druid数据源,不然会报异常,这里不再赘述。

总结

在搭建工程上踩了两天坑。以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • maven profile自动切换环境参数的2种方法详解

    maven profile自动切换环境参数的2种方法详解

    这篇文章主要给大家介绍了关于maven profile自动切换环境参数的2种方法,文中通过示例代码将这两种方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • springboot+springsecurity+mybatis+JWT+Redis 实现前后端离实战教程

    springboot+springsecurity+mybatis+JWT+Redis 实现前后端离实战教程

    这篇文章主要介绍了springboot+springsecurity+mybatis+JWT+Redis 实现前后端离实战教程,需要的朋友可以参考下
    2024-01-01
  • Java中枚举类型的一种使用方式

    Java中枚举类型的一种使用方式

    这篇文章主要介绍了Java中枚举类型的一种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • java 数据结构之栈与队列

    java 数据结构之栈与队列

    这篇文章主要介绍了java 数据结构之栈与队列的相关资料,这里对java中的栈和队列都做出实现实例来帮助大家理解学习数据结构,需要的朋友可以参考下
    2017-07-07
  • mybatis-plus中wrapper的用法实例详解

    mybatis-plus中wrapper的用法实例详解

    本文给大家介绍了mybatis-plus中wrapper的用法,包括条件构造器关系、项目实例及具体使用操作,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Spring Boot JPA访问Mysql示例

    Spring Boot JPA访问Mysql示例

    本篇文章主要介绍了Spring Boot JPA访问Mysql示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Mybatis事务如何跟Spring结合(数据库事务特性和Spring事务管理源码)

    Mybatis事务如何跟Spring结合(数据库事务特性和Spring事务管理源码)

    MyBatis与Spring的事务结合主要是通过Spring的事务管理和MyBatis的数据库操作来实现的,在本文中,我们将从数据库事务特性和Spring事务管理源码两个角度来分析MyBatis事务如何与Spring结合到一起的原理,感兴趣的朋友一起看看吧
    2024-01-01
  • MybatisPlus 插入或更新数据时自动填充更新数据解决方案

    MybatisPlus 插入或更新数据时自动填充更新数据解决方案

    本文主要介绍了MybatisPlus 插入或更新数据时自动填充更新数据解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Swagger2配置Security授权认证全过程

    Swagger2配置Security授权认证全过程

    这篇文章主要介绍了Swagger2配置Security授权认证全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Spring Boot Gradle发布war到tomcat的方法示例

    Spring Boot Gradle发布war到tomcat的方法示例

    本篇文章主要介绍了Spring Boot Gradle发布war到tomcat的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论