idea+spring boot+dubbox搭建微服务SSM框架环境项目(maven-图文并解)
搭建项目之前可以先去我的第一篇微服务项目搭建之前的一些工作准备,中间件等的设置,这里是连续创建,用的都是之前创建好的基础,所以直接更着走了,第一篇微服务链接地址:https://blog.csdn.net/gaofengyan/article/details/85156496
1. 新建project smbms-springboot-dubbo
创建普通maven工程项目:
工程建好如下:
检查maven设置(快捷键:CTRL+alt+S):
注意,我这里没有选择自动导包功能,所以后面每一步都需要自己手动刷新,避免了idea对jar包快速下载造成的仓库留存太多错误而对项目的影响。
2. 新建module smbms-springboot-dubbox-common(公共module)
同样创建普通maven的公共module:
公共模块如下,并去掉父类继承操作:
2.1)增加 json 插件包 jar包 配置并手动更新:
[code] <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.12</version> </dependency>
2.2)编写实体类pojo与service接口
User.java实体类:
[code]package org.kgc1803.smbms.pojo; import java.io.Serializable; public class User implements Serializable { private Integer id; private String userCode; private String userName; private String password; public User(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
Order.java实体类:
[code]package org.kgc1803.smbms.pojo; import org.codehaus.jackson.annotate.JsonProperty; import java.io.Serializable; public class Order implements Serializable { //@JsonProperty实体类可以自动转化为 json 类对象数据的属性 @JsonProperty private Integer id; @JsonProperty private Integer ownerUserId; @JsonProperty private String productName; @JsonProperty private Double price; @JsonProperty private Integer amount; public Order(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getOwnerUserId() { return ownerUserId; } public void setOwnerUserId(Integer ownerUserId) { this.ownerUserId = ownerUserId; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Integer getAmount() { return amount; } public void setAmount(Integer amount) { this.amount = amount; } }
OrderService.java接口:
[code]package org.kgc1803.smbms.service; import org.kgc1803.smbms.pojo.Order; import java.util.List; public interface OrderService { //查看所有 List<Order> findList(Integer id); }
UserService.java接口:
[code]package org.kgc1803.smbms.service; import org.kgc1803.smbms.pojo.User; /** * 用户接口 */ public interface UserService { //登陆 User loginUser(User u); }
2.3)编写完后这里需要用maven打成jar包并发布到注册中仓库
控制台出现下面情况说明打包和发布成功:
查看仓库的架包是否发布成功:
3. 新建module smbms-springboot-dubbox-provider(提供者module)
按照上面的方式创建提供者模块并对pom.xml文件做初修改:
3.1)pom.xml配置文件增加以下相应的jar包 配置
[code]<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.kgc1803</groupId> <version>1.0-SNAPSHOT</version> <artifactId>smbms-springboot-dubbox-provider</artifactId> <!--定义变量名--> <properties> <java.version>1.8</java.version> <spring.boot.version>1.5.10.RELEASE</spring.boot.version> <mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version> <mysql.driver.version>5.1.46</mysql.driver.version> </properties> <dependencies> <!--公共包--> <dependency> <groupId>org.kgc1803</groupId> <artifactId>smbms-springboot-dubbox-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--spring-boot-starter 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${spring.boot.version}</version> </dependency> <!--mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.driver.version}</version> </dependency> <!--mybaties-spring-boot-starter--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybaties.spring.boot.version}</version> </dependency> <!--spring-boot-starter-test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>${spring.boot.version}</version> </dependency> <!-- *************************************以下是spring+dubbox的jar包******************************** --> <!--zookeeper 包--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <!-- zkclient 包--> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <!-- dubbo 包--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> </dependency> <!--hessian 包--> <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.7</version> </dependency> <!--dubbox rest 风格包 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-rpc-rest</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.1</version> </dependency> </dependencies> </project>
注意,按照前面的微服务配置方式,是一样的jar包,只是在遇到jar包版本跨越太大就会出现冲突,并且有很多jar包是重复的,这时候我们需要耐心调整jar包的版本,尽量统一并兼容。以上是在之前的微服务项目的jar包中将版本归一后的的,现在再做一些jar去重,精简后的配置文件如下,并且这里并没有完全达到全部去重的效果:
[code]<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.kgc1803</groupId> <version>1.0-SNAPSHOT</version> <artifactId>smbms-springboot-dubbox-provider</artifactId> <!--定义变量名--> <properties> <java.version>1.8</java.version> <spring.boot.version>1.5.10.RELEASE</spring.boot.version> <mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version> <mysql.driver.version>5.1.46</mysql.driver.version> </properties> <dependencies> <!--公共包--> <dependency> <groupId>org.kgc1803</groupId> <artifactId>smbms-springboot-dubbox-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--spring-boot-starter 依赖--> <!--mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.driver.version}</version> </dependency> <!--mybaties-spring-boot-starter--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybaties.spring.boot.version}</version> </dependency> <!--spring-boot-starter-test--> <!-- *************************************以下是spring+dubbox的jar包******************************** --> <!--zookeeper 包--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <!-- zkclient 包--> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <!-- dubbo 包--> <!--hessian 包--> <!--dubbox rest 风格包 --> <!--dubbo-springboot-starter 包--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.1</version> </dependency> </dependencies> </project>
3.2)编写service 实现类、dao-mapper
UserMapper.java dao-mapper类
[code]package org.kgc1803.smbms.dao; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.kgc1803.smbms.pojo.User; import org.springframework.stereotype.Repository; /** * @Mapper 表示该接口是一个注解mybaties接口 * @Repository 表示注入一个dao实现类 */ @Mapper @Repository public interface UserMapper { //登陆 @Select("SELECT id,userCode,userName\n" + "FROM smbms_user\t\n" + "WHERE userCode=#{userCode} and password=#{password}") @Results(id="userMap",value = { @Result(property = "id",column = "id",javaType =Integer.class ), @Result(property = "userName",column = "userName",javaType =String.class), @Result(property = "userCode",column = "userCode",javaType =String.class) }) User loginUser(User u); }
UserServiceImpl.java 实现类:
[code]package org.kgc1803.smbms.service; import com.alibaba.dubbo.config.annotation.Service; import org.kgc1803.smbms.dao.UserMapper; import org.kgc1803.smbms.pojo.User; import javax.annotation.Resource; /** * springboot的注解功能实现了dubbox的配置文件部分功能,如发布服务: * <dubbo:service protocol="dubbo" interface="cn.kgc1803.smbms_common.service.UserService" ref="userService" timeout="10000" /> */ @Service(timeout = 10000) public class UserServiceImpl implements UserService { @Resource private UserMapper userMapper; public User loginUser(User u) { return userMapper.loginUser(u); } }
3.3)在spring boot中配置发布dubbox 服务,spring boot精简了更多的配置文件,大多已经加入到注解里面实现,只有部分需要配置文件实现。
1)在application.properties配置文件配置
[code]#dataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/dubbo-smbms spring.datasource.username=root spring.datasource.password=123456 #设置提供者本次发布的应用名称 dubbo.application.name=smbms_provider123 dubbo.registry.address=zookeeper://127.0.0.1:2181 #dubbo扫描包 发布服务所在的包 dubbo.scan.base-packages=org.kgc1803.smbms.service #服务器发布的端口号 server.port=21001
3.4)新建提供者的发布main窗口SmbmsProviderApplication.java 通过这个main窗口将提供者注入到注册中心,提供服务;重点是这里要注意这个main窗口创建的位置,他必须与dao-mapper和service实现类同级或高一级,才能在启动时扫描到所有类:
[code]package org.kgc1803.smbms; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; @SpringBootApplication public class SmbmsProviderApplication { public static void main(String[] args){ //项目以web方式启动 new SpringApplicationBuilder(SmbmsProviderApplication.class).web(false).run(); } }
4. 新建module smbms-springboot-dubbox-consume(消费者module)
按照上面的方法创建消费者模块:
在main下面创建webapp/WEB-INF/view目录,以便创建web的jsp页面。
4.1)增加jar包 修改配置;手动添加spring boot的启动插件:
[code]<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.kgc1803</groupId> <version>1.0-SNAPSHOT</version> <artifactId>smbms-springboot-dubbox-consume</artifactId> <packaging>war</packaging> <!--定义变量名--> <properties> <java.version>1.8</java.version> <spring.boot.version>1.5.10.RELEASE</spring.boot.version> <mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version> <mysql.driver.version>5.1.46</mysql.driver.version> </properties> <dependencies> <!--公共包--> <dependency> <groupId>org.kgc1803</groupId> <artifactId>smbms-springboot-dubbox-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--spring mvc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> </dependency> <!--dubbo-spring-boot-starter--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.1</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <!--zookeeper 包--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <!-- zkclient 包--> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <!--jsp 页面插件jar包--> <!--ideal 内置tomcat不支持jsp,增加jsp jar包--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>8.5.27</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>8.5.27</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <!--spring boot的启动插件--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.RELEASE</version> </plugin> </plugins> </build> </project>
4.2)编写 controller层
[code]package org.kgc1803.smbms.controller; import com.alibaba.dubbo.config.annotation.Reference; import org.kgc1803.smbms.pojo.User; import org.kgc1803.smbms.service.UserService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.servlet.http.HttpSession; @Controller @RequestMapping("/user") public class UserController { @Reference private UserService userService; //登陆 @RequestMapping(value = "/dologin.html",method = RequestMethod.POST) public String dologin(User user, HttpSession session){ User u = userService.loginUser(user); if (u!=null){//登陆失败 session.setAttribute("session_user",u); return "index"; }else {//登陆成功 return "login"; } } }
4.3)在spring boot中配置订阅dubbox服务
1)在application.properties配置文件配置
[code]#spring mvc spring.mvc.view.prefix=/WEB-INF/view/ spring.mvc.view.suffix=.jsp #服务器 server.port=8083 server.tomcat.uri-encoding=UTF-8 #spring 字符集 spring.http.encoding.charset=UTF-8 spring.http.encoding.force=true spring.http.encoding.enabled=true #dubbo dubbo.application.name=smbms_consume_123 dubbo.registry.address=zookeeper://127.0.0.1:2181
4.4)新建消费者的main窗口 SmbmsConsumeApplication.java:
[code]package org.kgc1803.smbms; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SmbmsConsumeApplication { public static void main(String[] args){ SpringApplication.run(SmbmsConsumeApplication.class); } }
注意:消费者的启动并不使用这个窗口启动,同样用右边的窗口spring boot run启动。
login.jsp
[code]<%-- Created by IntelliJ IDEA. User: Lenovo Date: 2018/12/26 Time: 15:30 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登陆</title> </head> <body> <form method="post" action="${pageContext.request.contextPath}/user/dologin.html"> 用户名:<input type="text" name="userCode"> 密码:<input type="password" name="password"> <input type="submit" value="登陆"> </form> </body> </html>
index.jsp
[code]<%-- Created by IntelliJ IDEA. User: Lenovo Date: 2018/12/24 Time: 15:00 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>首页</title> </head> <script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/jquery-3.3.1.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/order.js"></script> <body> 登陆成功,欢迎你:${session_user.userName}<br> 订单列表: <ul> </ul> </body> </html>
5.启动测试
5.1)启动 SmbmsProviderApplication.java将提供者发布到注册中心(前提必须是启动zookeeper和tomcat服务脚本):
如下内容说明启动成功:
如果这里启动不了,则需要修改maven配置,如下红框处:
链接之前的配置:http://localhost:8080/dubbo-admin-2.8.4/
5.2)用spring boot 启动消费者
连接端口号:http://localhost:8082/
输入数据库的登陆信息验证:
跳转成功,到达首页,并取到值:
以上基础配置加测试就算成功了。有待更新!
- 【超详细图文教程】用SpringBoot+Maven搭建SSM框架
- Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建+SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- IDEA基于Spring Cloud Netflix(2.1.0RC3)的Spring Cloud Eureka来实现服务治理的微服务架构搭建以及和SSM框架的整合——实战教程
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境【转】
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- Idea Maven项目搭建spring 框架
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- 开发环境搭建, java web SSM SpringBoot+Mybatis SpringCloud等项目搭建
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(五)
- 微服务中基于Spring Boot的maven分布式项目框架的搭建
- 用ssm框架在idea上搭建javaWeb maven项目
- IDEA搭建SpringBoot+Maven+Mybatis+MySQL-Web项目流程
- maven环境搭建并运行springboot项目
- 基于dubbo的分布式项目框架搭建 开发工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restful api) --(二)
- java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目
- idea+maven+springboot搭建web简单项目经历小计(RestController)
- 手把手搭建最简单的SSM框架Maven,idea(spring+springmvc+mybatis)附源代码
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- java搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目