基础框架
先从 start.spring.io/ 上面下载初始框架 生成之后解压导入idea
- 先配置好端口号
- 写个测试Controller类,看项目是否能正常启动 访问都正常,进行第二步
集成数据库,这里用到的是mybatis
首先引入mybatis和mysql相关的jar包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
接着增加mysql的配置:
spring.datasource.username = {your.usernmae}
spring.datasource.password = {your.password}
spring.datasource.url = jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=true\
&serverTimeZone=UTC
drive-class-name = com.mysql.jdbc.Driver
最后上代码就可以了
控制层: 服务层: dao层: 测试结果:
集成RocketMQ
先部署好rocketmq环境,我采用的是docker安装 安装步骤参考:www.cnblogs.com/kiwifly/p/1… maven依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
安装完毕后,准备配置文件:
追加mq-》 spring.profiles.include = db,mq 指定nameserver和生产组名称
写生产者测试类:
@RequestMapping("produce")
public class ProduceController {
@Resource
RocketMQTemplate rocketMQTemplate;
@PostMapping("send")
public void sendMessage() {
Message message = Message.builder().id(UUID.randomUUID().toString()).message("send " +
"message").build();
rocketMQTemplate.convertAndSend("test-send", message);
System.out.println("生产者发送消息成功,消息内容" + message.toString());
}
}
@Data
@Builder
public class Message {
private String id;
private String message;
}
写消费者测试类:
@Service
@RocketMQMessageListener(consumerGroup = "demo-group", topic = "test-send")
public class TestSendConsumer implements RocketMQListener<Message> {
@Override
public void onMessage(Message message) {
System.out.println("消费者接收到消息" + message.toString());
}
}
运行结果:
集成redis
安装redis环境,这里也是在docker下安装,参考: www.runoob.com/docker/dock…
引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
追加redis配置文件: spring.profiles.include = db,mq,redis。redis配置如下:
spring.redis.host= 127.0.0.1
spring.redis.port=6379
# Redis 数据库索引(默认为 0)
spring.redis.database=0
# Redis 服务器连接端口
# Redis 服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
创建redis工具类,简单示例:
@Component
@Slf4j
public class RedisUtils {
@Resource
private RedisTemplate redisTemplate;
/**
* 普通缓存key获取
*
* @param key 缓存key
* @return
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 设置键值
*
* @param key 键
* @param value 值
* @return
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
log.error("设置键值失败,", e);
return false;
}
}
}
写个测试controller观察一下:
/**
* @author lbb
* @date 2020/12/8 4:19 下午
*/
@RestController
@RequestMapping("/redis/")
public class RedisController {
@Resource
private RedisUtils redisUtils;
@PostMapping("set")
public void set() {
redisUtils.set("test", "testSet");
System.out.println(redisUtils.get("test"));
}
}
控制台打印出值: 代表集成成功,具体redis还有很多方法,这里不一一列举。
集成dubbo
首先,安装zookeeper,我采用docker安装zk
docker pull zookeeper
docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest
这样就算启动成功了。 然后引入jar包:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.6</version>
</dependency>
接着增加dubbo配置,我的配置如下:
然后创建接口:
public interface IFacade {
void testDubbo();
}
提供者实现接口,注意要引dubbo的包:
模拟消费者消费:
package com.lbb.demo.consume;
import com.lbb.demo.facade.IFacade;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
/**
* @author lbb
* @date 2020/12/9 9:03 下午
*/
@Component
public class ConsumeDubbo {
@Reference(check = false, timeout = 5000)
private IFacade facade;
private void consume() {
facade.testDubbo();
}
}
写个测试controller:
package com.lbb.demo.controller;
import com.lbb.demo.consume.ConsumeDubbo;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author lbb
* @date 2020/12/10 6:19 下午
*/
@RestController
@RequestMapping("/dubbo/")
public class DubboController {
@Resource
private ConsumeDubbo consumeDubbo;
@PostMapping("test")
public void testDubbo() {
consumeDubbo.consume();
}
}
最重要的一步,记得在启动类加上@EnableDubbo
@SpringBootApplication
@EnableDubbo
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
最后启动项目,调用接口,发现启动报错:The bean 'dubboBootstrapApplicationListener' could not be registered. A bean with that name has already been defined and overriding is disabled.
根据建议解决,在配置文件加上spring.main.allow-bean-definition-overriding=true 再次启动,一度又失败了:
2020-12-10 18:41:30.513 ERROR 74037 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.createZookeeperClient(CuratorZookeeperTransporter.java:26) ~[dubbo-2.7.6.jar:2.7.6] 引入包:
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
又出现:java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener 再引入包:
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
即可解决问题,测试我们的接口,按预期打印出结果,证明dubbo服务集成完成。
总结
整篇下来内容比较多,有时候自己去集成一些组件,才能在过程中踩坑成长,有些坑没有明说原因,感兴趣的同学可以自行研究。