准备工作
1,准备mysql服务环境
使用docker创建一个mysql服务
docker run -d --name mysql -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql#下载并启动mysql
docker exec -ti mysql bash#进入mysql
mysql -uroot -p123456#登录mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;#开启远程访问
FLUSH PRIVILEGES;
EXIT;
2,准备redis服务环境
docker run -itd -p 6379:6379 --name redis -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data redis redis-server /etc/redis/redis.conf#下载并开启redis
docker exec -it redis /bin/sh#进入redis
redis-cli#登录redis
config set requirepass 123456 #修改redis密码
3,准备zookeeper服务环境
docker run -p 2181:2181 --name zookeeper --restart always -d zookeeper #下载并启用zk
下载并启用dubbo-admin,管理zookeeper
docker run -d --name dubbo-admin -v /Applications/workSpace/docker/dubbo/data:/data -p 7001:8080 -e admin.registry.address=zookeeper://172.xx.0.4:2181 -e admin.config-center=zookeeper://172.xx.0.4:2181 -e admin.metadata-report.address=zookeeper://172.xx.0.4:2181 --restart=always apache/dubbo-admin#下载并启用
#172.xx.0.4这个ip就是安装zookeeper后的服务ip
#docker查看容器的ip地址
#查看Docker的底层信息。
#docker inspect 会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
# 列出所有容器的IP地址
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
# 查看容器所有状态信息;docker inspect NAMES
# 查看 容器ip 地址docker inspect --format='{{.NetworkSettings.IPAddress}}' ID/NAMES
# 容器运行状态docker inspect --format '{{.Name}} {{.State.Running}}' NAMES
# 查看进程信息docker top NAMES
# 查看端口;(使用容器ID 或者 容器名称)docker port ID/NAMES
浏览器输入localhost:7001,访问账号密码 root/root
4,准备逆向生成bean的xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="D:/mysql-connector-java-8.0.16.jar"/>
<context id="sqlserverTables" targetRuntime="MyBatis3">
<!-- 生成的pojo,将implements Serializable -->
<!-- <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>-->
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/student"
userId="root" password="root">
<!--MySQL 不支持 schema 或者 catalog 所以需要添加这个-->
<!-- 不然会出现生成器把其他数据库的同名表生成下来的问题 -->
<!-- 现象就是某个类中出现了数据库表里面没有的字段 -->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL
和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,
也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下 -->
<!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN"> -->
<javaModelGenerator targetPackage="model"
targetProject="D:/docker/www/dubbo-admin/interface/src/main/java">
<property name="enableSubPackages" value="true" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--对应的mapper.xml文件 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="D:\docker\www\dubbo-admin\interface\src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 对应的Mapper接口类文件 XMLMAPPER/ANNOTATEDMAPPER-->
<javaClientGenerator type="ANNOTATEDMAPPER"
targetPackage="com.springboot.provider.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 列出要生成代码的所有表,这里配置的是不生成Example文件 -->
<table tableName="user" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<property name="useActualColumnNames" value="false" />
</table>
</context>
</generatorConfiguration>
5,准备slf4j日志xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<property name="log.path" value="student.log" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<logger name="com.example.logback" level="warn" />
</configuration>
6,准备一个sql脚本
/*
Navicat Premium Data Transfer
Source Server : student
Source Server Type : MySQL
Source Server Version : 80024
Source Host : 127.0.0.1:3306
Source Schema : student
Target Server Type : MySQL
Target Server Version : 80024
File Encoding : 65001
Date: 30/05/2022 22:20:32
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`age` int DEFAULT NULL,
`password` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`role` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb3;
-- ----------------------------
-- Records of student
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES (1, 'zhangsan', 18, '123456', NULL);
INSERT INTO `student` VALUES (3, 'wangwu', 14, '123456', NULL);
INSERT INTO `student` VALUES (4, '赵六', 34, '123456', NULL);
INSERT INTO `student` VALUES (5, '田七', 34, '123456', NULL);
INSERT INTO `student` VALUES (6, '111', 15, NULL, NULL);
INSERT INTO `student` VALUES (8, '张二麻子', 17, '123456', NULL);
INSERT INTO `student` VALUES (9, '张二麻子', 17, '123456', NULL);
INSERT INTO `student` VALUES (10, '????', 17, NULL, NULL);
INSERT INTO `student` VALUES (11, '????', 17, NULL, NULL);
INSERT INTO `student` VALUES (12, '张二麻子', 17, NULL, NULL);
INSERT INTO `student` VALUES (13, '张二麻子', 17, '123456', NULL);
INSERT INTO `student` VALUES (15, 'admin', 18, 'admin', 'admin');
INSERT INTO `student` VALUES (16, 'test002', 22, '123', '123');
INSERT INTO `student` VALUES (17, 'test003', 22, '123', '123');
INSERT INTO `student` VALUES (18, 'test003', 22, '123', '123');
INSERT INTO `student` VALUES (19, 'test004', 22, '123', '123');
INSERT INTO `student` VALUES (20, 'test005', 22, '123', '123');
INSERT INTO `student` VALUES (21, 'test006', 18, 'admin', 'admin');
INSERT INTO `student` VALUES (22, 'test007', 18, 'admin', 'admin');
INSERT INTO `student` VALUES (23, 'test0081', 18, '123', 'test005');
INSERT INTO `student` VALUES (24, 'test0082', 18, '123', 'test005');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
1,搭建创建服务工程
1,创建一个空的父工程,用来统一管理依赖
删除src目录,在pom文件中添加
<packaging>pom</packaging>
2,创建一个interface接口工程,主要存放业务bean,接口类
点击菜单file-new-module
创建一个maven工程
输入接口工程的名称,选择父工程为刚才新建的工程,点击完成
3,创建一个消费者工程,主要是和web前端进行交互
点击菜单file-new-module,选择spring initializr,就是新建的spring boot工程
消费者需要和前端页面进行交互,需要勾选web和thymeleaf集成,
4,创建一个服务提供者,给消费者提供业务服务,主要实现业务接口
点击菜单file-new-module,选择spring initializr,就是新建的spring boot工程
只需勾选web服务即可
2,配置pom文件
配置服务提供者的配置文件,一个服务提供者需要添加的依赖
1,连接数据库驱动
2,springboot集成redis起步依赖
3,springboot集成zookeeper依赖
4,dubbo集成springboot起步依赖
5,springboot集成mybatis起步依赖
6,mybatis逆向生成插件
7,自定义接口依赖
8,slf4j日志依赖
配置消费者的配置文件,需要添加的依赖
1,自定义接口依赖
2,slf4j日志依赖
3,springboot集成zookeeper依赖
4,dubbo集成springboot起步依赖
3,设置配置中心
4,编写业务代码
5,测试结果
6,打包部署
评论前必须登录!
注册