spring boot+spring cloud+mabtis集成遇到的坑
最近在学习spring cloud,首先简单的创建eureka-server,eureka-client,ribbon,feign…等等demo,然后开始集成mybatis,开始项目构建,下面开始分享一下我遇到的坑。
-
遇到的坑报错datasource为空
检查版本号是否对应,我是在pom文件内一个一个依赖删除,最后发现spring boot项目可以运行,但是导入spring cloud包后报错,最后发现spring cloud版本错误,spring boot的版本为2.1.1,spring cloud的版本为Finchley.SR1,而这个spring cloud版本仅支持spring boot的版本2.0.x.
报错内容 APPLICATION FAILED TO START
将spring cloud版本号更新为Greenwich.RELEASE后解决 - 找不到server 报错内容:Cannot execute request on any known server
检查server是否启动,可访问server的地址,看看是否有页面打开。
将server停机重启,待启动完成后再启动本项目
最后奉上可运行代码:
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.edujia</groupId>
<artifactId>poster</artifactId>
<version>dev-SNAPSHOT</version>
<name>poster</name>
<description>project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
</dependencies>
<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>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.yml
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://${eureka.instance.hostname}:8991/eureka/
server:
port: 8993
spring:
application:
name: poster-service
main:
allow-bean-definition-overriding: true
jpa:
database: MYSQL
show-sql: true
datasource:
url: jdbc:mysql://192.168.1.73:3306/lizj
name: root
password: root
driver-class-name: com.mysql.jdbc.Driver
实体(都是使用的lombok注解,超简洁!)
/**
* 切图
* @author john
* @date 2019-01-29
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class PointCropBean implements Serializable {
private static final long serialVersionUID = 1L;
/** 主键 */
private long id;
/** 原图地址 */
private String imageUrl;
/** 预览图地址 */
private String previewImageUrl;
/** 支持切图数组 */
private String support;
/** 创建时间 */
private String createTime;
/** 操作人id */
private String operatorId;
/** 操作人名称 */
private String operatorName;
/** 是否仅vip可用 */
private int isVip;
}
mapper(未添加注解,而是使用的启动类上增加注解@MapperScan(basePackages = “com.XXX.dao”))
/**
* @author john
* @date 2019/1/29
*/
public interface PointCropMapper {
/**
* 查询
* @param id
* @return
* @throws Exception
*/
@Select("select * from t_crop where id = #{id}")
PointCropBean selectById(int id)throws Exception;
/**
* 查询数据库
* @return
* @throws Exception
*/
@Select("select * from t_crop")
List<PointCropBean> selectList()throws Exception;
}
service(个人感觉只是传递)
/**
* @author john
* @date 2019/1/29
*/
public interface CropService {
/**
* 查询
* @param id
* @return
* @throws Exception
*/
PointCropBean selectById(int id)throws Exception;
}
impl
/**
* @author john
* @date 2019/1/29
*/
@Service
public class CropImpl implements CropService {
@Autowired
PointCropMapper cropMapper;
@Override
public PointCropBean selectById(int id) throws Exception {
return cropMapper.selectById(id);
}
}
ctr
/**
* @author john
* @date 2019/1/29
*/
@RestController
@RequestMapping("/crop")
public class CropCtr {
@Autowired
CropService cropService;
@GetMapping("/get/{id}")
public PointCropBean get(@PathVariable int id){
try {
return cropService.selectById(id);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}