SpringBoot入门(十四)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: SpringBoot入门(十四)

SpringBoot-集成redis,dubbo,ssm

项目应用: 1、整合ssm框架应用 spring+springmvc+mybatis(普通方式,整合tk:mybatis) 整合简单的ssm框架(spring+springmvc+普通的方式) 1.1、加入相关的依赖:

1.2、引入热部署插件和lambok插件: 热部署的插件在idea中需要配置的,但是在eclipse中引入就Ok了。

  1.       <dependency>
  2.            <groupId>org.springframework.boot</groupId>
  3.            <artifactId>spring-boot-devtools</artifactId>
  4.            <scope>runtime</scope>
  5.        </dependency>

1.3、配置项目自动编译,settings-build-compiler-这里必须需要勾上的。

1.4、启用devtools插件 shift+alt_ctrl+/->registry->勾选compiler.automake.allow.when.app.running。 1.5、在springBoot的插件里面做如下的配置: 以fork的方式去启动devtools:这个配置是必须配置的,不配置的话是不生效的。

上面的就是整个热部署的插件的步骤。 如何去启用lombok:一个实体类简化的插件:有了它之后实体类中hashCode,toString,get,set方法都不用手动去写,直接用注解来生成。 1.6、首先在idea中settings-plugins-搜索lombok-安装lombok插件:

1.7、在实体类上加上@Data,@Setter,@Getter,......加上这些注解之后就可以不用手动去写一些方法,这时就在这个类上加上这些方法了。

@AllArgsConstructor:带参数的构造方法的注解。 @NoArgsConstructor:无参的构造方法的注解。

lombok插件的注解有下面一些。

注意:在类加上@Data这个注解的话是有无参的构造方法,没有有参的构造方法。但是可以加上@AllArgsConstructor这个注解。 这就是插件的作用,凸显的很明显。 1.8、集成Mybatis

  1.         <dependency>
  2.            <groupId>org.mybatis.spring.boot</groupId>
  3.            <artifactId>mybatis-spring-boot-starter</artifactId>
  4.            <version>2.1.1</version>
  5.        </dependency>

1.9、如何去配置mybatis 在SpringBoot2.0以后一旦把mybatis的依赖引进来之后,它必须去找数据库的数据源,如果没有的话会报错的。

配置数据源的一些配置如下:这里不用配置数据库连接池了,用默认的就可以

配置下mybatis

建个mapper的接口:

这个接口对应一个在resources文件夹下的一个xxxMapper.xml的文件,每一个接口都会映射一个xml的文件,因为接口文件和xml文件要绑定,代码如下:

上面的方式在xml中加sql语句,在开发中用的很多, @Resource:注解的意思是按照找个bookMapper这个名称在spring容器中去找,有没有这样的一个名字的。如果存在的话就给它装配到BookMapper的属性中去。如果不存在的话会按照BookMapper这个类型去找,如果存在的话也会装配进来。所以是先根据名称去找,再根据类型去找。 如果是@Autowired的话是先按照类型去装配,后面再会按照名称去装配。

断言的结果如果是绿色的话就没问题。

9、批量插入:


上面的单表的操作不需要自己去写的,所以选用mybatis的插件来做 比如使用tk:mybatis来生成mybatis的增删改查的语句。 2、引入tk:mybatis的插件:

2.1、引入的依赖如下:tk.mybatis就是通用mapper。

  1.        <dependency>
  2.            <groupId>tk.mybatis</groupId>
  3.            <artifactId>mapper-spring-boot-starter</artifactId>
  4.            <version>2.0.4</version>
  5.        </dependency>

2.2、引入上面的依赖的话,会给引入一个自动配置的tk.mybatis的jar包,有了它之后就知道怎么配置了。

2.3、看下MapperProperties,它有一个前缀mapper

MapperProperties继承了Config这个类。下面是可选的配置的选项。

2.4、属性的配置文件如下:

2.5、写一个项目中所有mapper的父类,代码如下:

  1. package com.boot.ssm.bootssm2.common;

  2. import tk.mybatis.mapper.common.Mapper;
  3. import tk.mybatis.mapper.common.MySqlMapper;

  4. /**
  5. * 项目中所有mapper的父类
  6. * @param <T>
  7. */
  8. public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
  9. }

2.6、新建一个图书信息的Mapper文件的接口去继承BaseMapper,代码如下:

2.7、在项目中如果每一个mapper的接口都写一个@Mapper注解的话,很不方便了,可以用下面的方式:在主类上加上@MapperScan的tk.mybatis的注解。value的属性的值是一个数组,这里可以配置多个路径。

2.8、在domain中加一个实体类:

2.9、主函数的代码如下:

运行下:

注意:如果有复合主键的话只能用配置文件了。

在下面的两个jar里面就有方法支持复杂的sql语句的查询。

总结:tk.mybatis和jpa的用法有很多是类似的。如果是多表操作的话还是在xml里面操作,在tk.mybatis中是操作不了的。现在开发的项目中大多数使用单表操作了,基本不怎么用多表了。


3、SpringBoot集成dubbo:

3.1、新建一个dubbo-api的maven项目:这个只需要提供接口就可以,什么都不需要引入,只需要提供服务:

3.2、新建一个实体类,由于这个实体类用户信息类在网络中进行传输,所以要实现序列化接口:

3.3、用dubbo一般用来发布服务的,也就是服务,提供一个api的接口,代码如下:

  1. package org.example.api;

  2. import org.example.domain.UserInfo;

  3. public interface UserService {
  4.    //定义用户登录的api
  5.    UserInfo  loginUser(UserInfo  user);
  6. }

3.4、这个api由服务去实现,实现之后给消费者去消费就可以了,新建一个dubbo-provider的boot项目,由于这个provider是要实现api的,实现之后是要给客户端提供服务的,所以要把api的依赖添加到provider项目中:

3.5、写一个服务的实现类,交给Spring容器去管理,写的是单机版本的,并不是分布式的。代码如下:

  1. package com.boot.dubbo.demo.bootdubbo.service;

  2. import com.boot.dubbo.demo.api.UserService;
  3. import com.boot.dubbo.demo.domain.UserInfo;
  4. import org.springframework.stereotype.Service;

  5. @Service
  6. public class UserServiceImpl implements UserService {
  7.    @Override
  8.    public UserInfo login(UserInfo userInfo) {
  9.        return userInfo;
  10.    }
  11. }

3.6、引入dubbo的依赖:由于zkclient这个客户端和zookeeper进行通信,所以要引入zkclient的依赖。也要引入zookeeper的依赖,由于zookeeper包含logback和log4j的依赖的,所以要排除掉依赖,由于在springBoot中已经有了这两个依赖了。否则的话会报错的。

3.7、配置dubbo配置项:在引入dubbo依赖的时候,会引入一个starer的依赖:

配置如下:

然后把接口给暴漏出去,代码如下:

这个api会给客户端调用,所以要分开。

3.8、启用dubbo的整个配置:

这时整个dubbo的服务端就完事了。

3.9、启动下服务端:这时就把服务注册到了zookeeper上了。

新建一个消费端:依赖只需要web就可以了。由于消费端也是依赖于dubbo的,并且消费端的配置和服务端的配置也是一样的:

依赖也是服务端的依赖一样,所以也加进来:

由于消费端也是需要注入api接口的,不需要实现类的。所以消费端也需要注入api的依赖。

消费端也需要启动整个dubbo的配置:

在消费端写一个controller去测试,代码如下:Reference  这个注解的意思是在spring容器中是有的但是从注册中心里面去找有没有这样的对象存在,如果存在的话,通过反序列化的方式赋给这个属性然后进行使用。

  1. package com.boot.consumer.demo.dubboconsumer.controller;
  2. import com.alibaba.dubbo.config.annotation.Reference;
  3. import com.boot.dubbo.demo.api.UserService;
  4. import com.boot.dubbo.demo.domain.UserInfo;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. public class UserController {
  9.    //引用dubbo服务端暴漏出的接口
  10.    @Reference
  11.    private UserService userService;
  12.    @GetMapping("/login")
  13.    public UserInfo  userInfo(UserInfo userInfo){
  14.       return  userService.login(userInfo);
  15.    }
  16. }

启动下消费端运行下访问下项目:

小节总结:上面的过程就是SpringBoot去整合dubbo的步骤。zookeeper发布订阅的模式,dubbo使用rpc协议的方式进行通信的,底层用的是socket。

整个dubbo的架构图:

redis也支持服务的注册中心。但是一般用zookeeper,因为zookeeper是高可用的服务注册中心。


4、SpringBoot集成redis

redis:就是一个键值对的nosql数据库

4.1、新建一个项目boot-redis,引入redis和web的依赖:

  1.      <dependency>
  2.            <groupId>org.springframework.boot</groupId>
  3.            <artifactId>spring-boot-starter-data-redis</artifactId>
  4.        </dependency>
  5.        <dependency>
  6.            <groupId>org.springframework.boot</groupId>
  7.            <artifactId>spring-boot-starter-web</artifactId>
  8.        </dependency>

4.2、由于在springBoot中自动装配了redis:

只要在类的路径下RedisOperations的话,并且注入了RedisProperties对象的话。就会把这个类装配置进去,并且如果在容器中不存在redisTemplate这个对象的话也会把redisTemplate对象装配进去。SringRedisTemplate这个对象如果在spring容器中不存在的话也会把StringRedisTemplate对象装配到spring容器中去。

StringRedisTemplate的父类就是RedisTemplate。

所以这里根据RedisTemplate对象获取到了两个对象。

现在用RedisTemplate操作下,代码如下:

运行 的结果如下:所以说用redisTemplate是不行的,因为把字符串或者对象存到redis中的话应该有相应的序列化器,如果没有序列化的话肯定是乱码的,redisTemplate默认用的是jdk的序列化器,因为存的时候是二进制,读的时候是把字符串读出来。如果用redisTemplate的话存到redis中是乱码的。

stringRedisTemplate就可以的,如果key相同就会给覆盖。因为StringRedisTemplate有自己的序列化器

运行的结果如下:

如果用StringRedisTemplate存个对象,代码如下:会报错的,报错的原因是不能把一个对象转成字符串。

解决办法:1>:把这个对象转成json字符串。加入依赖:fastjson

  1.      <dependency>
  2.            <groupId>com.alibaba</groupId>
  3.            <artifactId>fastjson</artifactId>
  4.            <version>1.2.8</version>
  5.        </dependency>

主函数的代码修改如下:

能够存到redis中,但是存的类型不清楚。

2、上面的方法太Low了。都是用框架封装好的,一般会自定义序列化器

代码如下:

主函数修改如下:

运行如下:这时就能看到存的类型了。

用jackson的效率不高,压缩出来的东西回很长。比如用fastjson,或者gson。

1、用fastjson,在项目中经常用的是fastjson,但是也有用gson的,gson的序列化器和fastjson的序列化器的配置是一样的。

1.1、新建一个序列化器,代码如下:

1.2、然后把这个序列化器装配到spring容器中,代码如下:

运行的结果如下:

总结:上面的就是用springBoot去整合ssm,整合dubbo,redis的过程。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
11月前
|
XML Java Spring
SpringBoot2.0入门(详细文档)(下)
SpringBoot2.0入门(详细文档)(下)
SpringBoot2.0入门(详细文档)(下)
|
11月前
|
SQL 存储 开发框架
SpringBoot2.0入门(详细文档)二
SpringBoot2.0入门(详细文档)二
|
11月前
|
Java 测试技术 Maven
SpringBoot2.0入门(详细文档)(上)
SpringBoot2.0入门(详细文档)(上)
|
13小时前
|
Java 应用服务中间件 Spring
SpringBoot入门(十一)
SpringBoot入门(十一)
SpringBoot入门(十一)
|
13小时前
|
Java 应用服务中间件 网络安全
SpringBoot入门(十二)
SpringBoot入门(十二)
|
Java 调度 Spring
SpringBoot与任务(十一)
SpringBoot与任务(十一)
96 0
SpringBoot与任务(十一)
|
SQL XML Java
14、SpringBoot2.0基本使用笔记(十四)
第一种启动方式:直接用编辑器启动 第二种启动方式:mvn spring_boot run 第三种启动方式: mvn install (先编译项目,targe 生成 jar) java -jar project.jar 后两种启动方式都需先进入到项目目录上再运行命令。
173 0
|
druid Java 关系型数据库
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
485 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
|
Java 应用服务中间件 Maven
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
224 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
|
JSON Java 应用服务中间件
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
171 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)