Feign+mybatisplus搭建項目遇到的坑及解決
出現(xiàn)的錯誤
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.接口工程中創(chuàng)建無extends IService的接口 A
—— > 2.provider工程中放入代碼生成的service層 接口B
—— > 3.provider工程的實現(xiàn)類需要 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數(shù)據(jù)源依賴,可能會報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 #配置規(guī)則 隨機
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置規(guī)則 輪詢
## NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置規(guī)則 重試
## NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置規(guī)則 響應時間權(quán)重
## NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #配置規(guī)則 最空閑連接策略
# ConnectTimeout: 5000 #請求連接超時時間
# ReadTimeout: 10000 #請求處理的超時時間
# OkToRetryOnAllOperations: true #對所有請求都進行重試
# MaxAutoRetriesNextServer: 2 #切換實例的重試次數(shù)
# MaxAutoRetries: 2 #對當前實例的重試次數(shù)
prodvider工程
如圖:UserServiceImpl 需要實現(xiàn)這個UserService和IUserService

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數(shù)據(jù)源,不然會報異常,這里不再贅述。
總結(jié)
在搭建工程上踩了兩天坑。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
maven profile自動切換環(huán)境參數(shù)的2種方法詳解
這篇文章主要給大家介紹了關(guān)于maven profile自動切換環(huán)境參數(shù)的2種方法,文中通過示例代碼將這兩種方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-04-04
springboot+springsecurity+mybatis+JWT+Redis?實現(xiàn)前后端離實戰(zhàn)教程
這篇文章主要介紹了springboot+springsecurity+mybatis+JWT+Redis?實現(xiàn)前后端離實戰(zhàn)教程,需要的朋友可以參考下2024-01-01
java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列的相關(guān)資料,這里對java中的棧和隊列都做出實現(xiàn)實例來幫助大家理解學習數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2017-07-07
Mybatis事務如何跟Spring結(jié)合(數(shù)據(jù)庫事務特性和Spring事務管理源碼)
MyBatis與Spring的事務結(jié)合主要是通過Spring的事務管理和MyBatis的數(shù)據(jù)庫操作來實現(xiàn)的,在本文中,我們將從數(shù)據(jù)庫事務特性和Spring事務管理源碼兩個角度來分析MyBatis事務如何與Spring結(jié)合到一起的原理,感興趣的朋友一起看看吧2024-01-01
MybatisPlus 插入或更新數(shù)據(jù)時自動填充更新數(shù)據(jù)解決方案
本文主要介紹了MybatisPlus 插入或更新數(shù)據(jù)時自動填充更新數(shù)據(jù)解決方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Swagger2配置Security授權(quán)認證全過程
這篇文章主要介紹了Swagger2配置Security授權(quán)認證全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
Spring Boot Gradle發(fā)布war到tomcat的方法示例
本篇文章主要介紹了Spring Boot Gradle發(fā)布war到tomcat的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03

