springboot配置maven多模块管理开发demo
首先了解到maven多模块融合springboot的结构依赖
创建工程目录
001-springboot-dubbo-parent创建
首先要设置当前工程为父工程,删除,src目录,并且在pom
文件中,加入指定标签
packaging>pom</packaging>
然后就是,就是继承springboot工程为父工程(创建时添加,也可手动添加),并且进行代码版本的管理(springboot没加入版本的管理)
pom.xml文件
<?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>
<!--将自定义的父工程 继承于 springboot的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--指定此工程为父亲工程-->
<packaging>pom</packaging>
<!--在这个标签中同一设置 每个需要管理依赖的版本号-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- dubbo 集成springboot 版本号-->
<dubbo-spring-boot-starter-version>2.0.0</dubbo-spring-boot-starter-version>
<!-- zookeeper 注册中版本号-->
<zkclient-version>0.10</zkclient-version>
<!-- zookeeper 注册中心版本号-->
<mybatis-spring-boot-starter-version>2.0.0</mybatis-spring-boot-starter-version>
</properties>
<!-- 管理spring boot工程没有管理的依赖-->
<dependencyManagement>
<dependencies>
<!-- dubbo 集成springboot 所需要的依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo-spring-boot-starter-version}</version>
</dependency>
<!-- zookeeper 注册中心-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient-version}</version>
</dependency>
<!--mybaties 集成springboot依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<groupId>com.zzuli.springboot</groupId>
<artifactId>001-springboot-dubbo-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--指定 子模块-->
<modules>
<module>../002-springboot-dubbo-interface</module>
<module>
../springboot-dubbo-ssm-springboot-zonghe/003-springboot-dubbo-ssm-provider
</module>
<module>../springboot-dubbo-ssm-springboot-zonghe/004-springboot-dubbo-ssm-consumer</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
</build>
</project>
002-springboot-dubbo-interface
这是一个maven-java工程,用来存放接口和实体类,并且指定001-springboot-dubbo-parent为父工程,Moel包中的Student通过逆向工程生成的,并且要实现
Serializable接口
package com.zzuli.springboot.model;
import java.io.Serializable;
public class Student implements Serializable {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
service包时自己定义的接口,实现类在提供者
pom.xml文件
<?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>
<!-- 创建标签 将 接口工程 指向001 parent 为父工程-->
<parent>
<artifactId>001-springboot-dubbo-parent</artifactId>
<groupId>com.zzuli.springboot</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../001-springboot-dubbo-parent</relativePath>
</parent>
<!-- groupId 和 verison 都继承父工程都注释掉或者删除-->
<!-- <groupId>com.zzuli.springboot</groupId>-->
<artifactId>002-springboot-dubbo-interface</artifactId>
<!-- <version>1.0-SNAPSHOT</version>-->
<name>002-springboot-dubbo-interface</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
003-springboot-dubbo-ssm-provider
提供者时一个springboot工程,父工程指向001-springboot-dubbo-parent并且在这个工程中实现逆向工程生成 sql映射文件,实体类 还有mapper(dao)接口,并且需要手动配置,dubbo 暴露服务提供给消费者,还有连接redis 和 mysql数据库
目录结构😊
首先在pom.xml文件中,指定mybaties自动代码生成插加,还有指定sql映射文件资源路径,还要加入 mybaties,dubbo,zookeeper,mysql等依赖,不用添加版本号,已经交给父工程管理了
pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>001-springboot-dubbo-parent</artifactId>
<groupId>com.zzuli.springboot</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../001-springboot-dubbo-parent/pom.xml</relativePath>
</parent>
<!-- groupId 和 version 都集成父工程-->
<!-- <groupId>com.zzuli.springboot</groupId>-->
<artifactId>003-springboot-dubbo-ssm-provider</artifactId>
<!-- <version>0.0.1</version>-->
<name>003-springboot-dubbo-ssm-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<!-- provider所需要的依赖 dubbo mysql redis mybatis zookeeper 接口工程-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- spring框架起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- dubbo 集成springboot 所需要的依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- zookeeper 注册中心-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<!-- mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybaties 集成springboot依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--spirngboot 集成redis 起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 添加接口工程依赖 版本爱后不需要交给 父工程管理 要不然会报错 -->
<dependency>
<groupId>com.zzuli.springboot</groupId>
<artifactId>002-springboot-dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!-- 手动指定资源文件夹 sql映射文件-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<!-- mybatis代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 指定配置文件的位置-->
<configurationFile>src/main/resources/generatorMapper.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
<!-- springboot 项目打包 插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在指定好generatorMpper.xml路径之后,设置逆向工程并且进行生成。
generatorMpper.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>
<!--指定连接数据库的JDBC 驱动包所在位置,指定到你本机的完整路径-->
<classPathEntry location="D:\mysql-connector-java-5.1.46\mysql-connector-java-5.1.46.jar"/>
<!--配置table表信息内容体,targetRuntime 指定采用MyBatis3的版本-->
<context id="tables" targetRuntime="MyBatis3">
<!--抑制生成注释,由于生成的注释都是英文的,可以不让它生成-->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--配置数据库连接信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true"
userId="root"
password="root">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!--生成model 类,targetPackage 指定 model 类的包名,targetProject 指定
生成的 model放在idea的哪个工程(如果要生成到其他工程下,要用绝对路径 如下)下面-->
<javaModelGenerator targetPackage="com.zzuli.springboot.model"
targetProject="C:\Users\自定义\IdeaProjects\002-springboot-dubbo-interface\src\main\java">
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成 MyBatis的Mapper.xml文件,targetPackage 指定 mapper.xml文件的包名,targetProject 指定生成的 mapper.xml放在 idea的哪个工程下面
-->
<sqlMapGenerator targetPackage="com.zzuli.springboot.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!--生成 MyBatis的 Mapper接口类文件,targetPackage 指定 Mapper 接口类的包名,targetProject 指定生成的 Mapper 接口放在idea 的哪个工程下面
-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.zzuli.springboot.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--数据库表名及对应的Java模型类名-->
<table tableName="t_sudent" domainObjectName="Student"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
完成逆向工程的配置以后,如果以下报错,不用管它
自动生成代码以后,然后就是实现(自定义)接口 放入到ServiceImpl包中,
并且在这个实现类中 StudentServiceImpl 暴露服务
package com.zzuli.springboot.service.serviceImpl;
import com.alibaba.dubbo.config.annotation.Service;
import com.zzuli.springboot.mapper.StudentMapper;
import com.zzuli.springboot.model.Student;
import com.zzuli.springboot.service.StuentService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component //将 service是实现类放入到 spring容器中
@Service(interfaceClass = StuentService.class,version = "1.0.0", timeout=15000) //暴露服务接口
public class StuentServiceImpl implements StuentService {
// 使用注解给引用类型赋值 并且操作数据库
@Resource
private StudentMapper studentMapper;
@Override
public Student queryById(Integer id) {
Student student=studentMapper.selectByPrimaryKey(id);
return student;
}
}
然后就是在application-dev.properties中进行配置,数据库配置,dubbo配置
redis配置,修改tomcat的端口号,等等
application-dev.properties
#设置内嵌tomcat端口号
server.port=8081
#设置请求路径的上下文根
server.servlet.context-path=/
#设置连接数据的配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#设置dubbo的配置
#声明提供者的名称 保证唯一性 一般 和moudle 名称保持一致
spring.application.name=003-springboot-dubbo-ssm-provider
#声明当前服务为 提供者
spring.dubbo.server=true
#指定注册中心 ip地址 + 端口号
spring.dubbo.registry=zookeeper://192.168.98.130:2181
#设置redis的配置
#声明 reids 主机地址
spring.redis.host=192.168.98.130
#声明redis的端口号
spring.redis.port=6379
#声明redis的密码
spring.redis.password=root
application.properties配置文件就是开启application-dev.properties或者application-product.properties配置
application.properties配置
#激活dev文件
spring.profiles.active=dev
最后在入口类加入注解生成mappe包内的接口的实现类,并且开启dubbo配置
Application .class
package com.zzuli.springboot;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "com.zzuli.springboot.mapper") //扫描mapper包下所有的类并进行实现
@EnableDubboConfiguration //开器dubbo服务
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
004-springboot-dubbo-ssm-consumer
这是一个springboot工程 还要加入thymeleaf 前端模版,在pom.xml文件中加入
dubbo,mybatie. mysql zookepper,等等依赖
目录结构
首先配置xml 加入相应的依赖,并且,指定父亲工程,接口工程
pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>001-springboot-dubbo-parent</artifactId>
<groupId>com.zzuli.springboot</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../001-springboot-dubbo-parent/pom.xml</relativePath>
</parent>
<!-- groupId 和 version 都集成父工程-->
<!-- <groupId>com.zzuli.springboot</groupId>-->
<artifactId>004-springboot-dubbo-ssm-consumer</artifactId>
<!-- <version>0.0.1</version>-->
<name>004-springboot-dubbo-ssm-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<!-- 消费者 所需要的依赖-->
<!-- dubbo zookeeper 接口工程 thymeleaf-->
<dependencies>
<!-- srpingboot框架 集成 thymeleaf 依赖 前端模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<!-- springboot 框架起步依赖-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- dubbo集成springboot框架依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- zookeeper 注册中心-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<!-- 接口工程-->
<dependency>
<groupId>com.zzuli.springboot</groupId>
<artifactId>002-springboot-dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置application-dev.properties文件,指定注册中心,接收服务,还有,配置上下文根和视图解析器等等
#设置内嵌tomcat的端口号
server.port=8080
#设置请求路径的上下文 根
server.servlet.context-path=/
#配置 dubbo
#声明消费者 服务的名称 保证唯一性
spring.application.name=004-springboot-dubbo-ssm-consumer
#声明 注册中心
spring.dubbo.registry=zookeeper://192.168.98.130:2181
#关闭thymeleaf缓存
spring.thymeleaf.cache=false
#设置视图前后缀
spring.thymeleaf.suffix=.html
spring.thymeleaf.prefix=classpath:/templates/
#设置 字符编码
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
application.properties配置文件就是开启**application-dev.properties****配置
#激活dev文件
spring.profiles.active=dev
配置控制器类,并且接收dubbo暴露的接口‘
package com.zzuli.springboot.web;
import com.alibaba.dubbo.config.annotation.Reference;
import com.zzuli.springboot.model.Student;
import com.zzuli.springboot.service.StuentService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
@Controller //将控制器实现了 放入到 spring容器中
public class StudentController {
// 通过注解对引用类型进行赋值
@Reference(interfaceClass = StuentService.class,version = "1.0.0",check = false)
private StuentService stuentService;
@RequestMapping("/student/detail/{id}")
public String student(@PathVariable("id") Integer id, Model model){
//通过学生的id查询 详细信息
System.out.println(stuentService+"=============");
Student student =stuentService.queryById(id);
//将获取到的对象放入到 请求领域中
model.addAttribute("student",student);
return "studentDetail";
}
}
然后再创建studentDetail.html文件再 resources资源文件包下的templates
<!DOCTYPE html>
<!--声明以下标签 获取后台的数据-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
学生编号:<div th:text="${student.id}"></div>
学生年龄:<div th:text="${student.age}"></div>
学生姓名:<div th:text="${student.name}"></div>
</body>
</html>
最后一步
打开linux,关闭防火墙,开启redis服务------>zookeeper------->提供者---->消费者