上一篇 https://blog.csdn.net/zh_9590/article/details/100071365
主要说了springcloud的基于cloud技术的使用,接下来主要说说对于构建应用服务使用,使用方式方法多样化,具体采用什么主要是遵循公司要求规范或者项目规范,又或者个人喜好,我这这么使用主要是因为个人因素加上公司经历采用该结构设计。
主要说说分工程的目的:
base-common-utils:主要放了一些关于基础bean和feign类似的基础工具,多项目使用,提高代码的利用率。
base-dba:主要是一个多数据源的设计,这里采用了eql的技术,同时支持mysql、oracle的多数据源,也支持了阿里的druid的sql监控。
service-*:主要就是应用的,侧重点在业务方面。
接下来简单说说maven分工程:
maven分工程主要考虑的因素有这么多(就目前个人经验,肯定会有缺的,留言补充了我会及时更新博客),分工程侧重的是什么,在当下,大家都采用了微服务,有的按照服务分工程(在机器有限的情况下,会造成服务器不够用或者内存浪费),有的按照系统功能模块范畴划分(边界不好处理,容易出现一个工程解决问题,数据层容易出现冗余)......
一个项目,工程分太多了,一个git管理不好管理,在一个就是服务器的问题,因为一个springboot项目部署就需要消耗一个内存(有条件的,可以做一个空的springboot项目在linux服务器启动,完事用java的jconsole.exe看看运行状态,空项目都会消耗一定的内存的,现实工作就是很好的解释:一定的基数的员工要产出多倍的工作量),而这个服务能做的事有限,会造成服务器使用不满不达线。浪费服务器。
回归正题,继续说应用服务项目的构建。
maven项目,首先要看一个没见过的项目,首先看的就是maven的pom文件,接下来看pom文件的源码
ms-app父项目的pom文件
<?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>com.ms.zh</groupId>
<artifactId>ms-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>ms-app</name>
<description>微服务之应用服务</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modules>
<module>base-common-utils</module>
<module>base-dba</module>
<module>service-user</module>
<module>service-demo</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
<log.pattern>%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n</log.pattern>
<log.console>%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n</log.console>
</properties>
<dependencyManagement>
<dependencies>
<!-- 版本管控 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 部分包管控 -->
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-client -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}-${env}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>application-test.yml</exclude>
<exclude>application-dev.yml</exclude>
<exclude>application-pro.yml</exclude>
<exclude>application.yml</exclude>
<exclude>bootstrap.yml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<include>application-${env}.yml</include>
<include>bootstrap.yml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<finalName>${project.artifactId}-${project.version}-${env}</finalName>
<fork>true</fork>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<eureka-url>http://127.0.0.1:9010/eureka/</eureka-url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
<eureka-url>http://127.0.0.1:9010/eureka/</eureka-url>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
<eureka-url>http://127.0.0.1:9010/eureka/</eureka-url>
</properties>
</profile>
</profiles>
</project>
base-common-utils的pom文件:
<?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>
<artifactId>base-common-utils</artifactId>
<packaging>pom</packaging>
<version>0.0.1</version>
<name>ms-app</name>
<description>微服务之应用服务-基础项目</description>
<parent>
<groupId>com.ms.zh</groupId>
<artifactId>ms-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
base-dba的pom文件:
<?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>
<artifactId>base-dba</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base-dba</name>
<description>微服务之应用服务数据层,支持多数据源,阿里druid的sql检测</description>
<parent>
<groupId>com.ms.zh</groupId>
<artifactId>ms-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.ms.zh</groupId>
<artifactId>base-common-utils</artifactId>
<version>0.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.bingoohuang/eql -->
<!-- 数据层框架,主要是用于项目内部做多数据源使用,也可以主用 -->
<dependency>
<groupId>com.github.bingoohuang</groupId>
<artifactId>eql</artifactId>
<version>0.1.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
</project>
service-*的pom文件,这就展示一个demo的:
<?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>
<artifactId>service-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>service-demo</name>
<description>业务系统-demo工程示例</description>
<parent>
<groupId>com.ms.zh</groupId>
<artifactId>ms-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.ms.zh</groupId>
<artifactId>base-dba</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ms.zh</groupId>
<artifactId>base-common-utils</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
</project>
通过pom文件,就能够很清晰的看到项目的结构,对于应用服务层的基本就这些了。
总结:
springcloud框架的实际使用,在目前来看,没有一个很明确的标本来看,它主旨就是微服务,但是,在实际的使用中,这个微就是一个很大的难题,微的粒度难把控,就我目前所在公司使用的,刚开始都是将服务功能单独开发的(项目结构和包依赖是遵循统一版本的),后续随着项目发展,会渐渐的把一些稍微未定不在修改的慢慢合并,当然,要考虑到并发量大的和小的结合,不能把并发量大的合并到一块,会对服务器造成一定的压力,
对于应用的构建,只能做参考,应该结合自己实际情况来决定该如何明确的去实现设计。
由于这块没办法说的很详细,只能附上自己的设计源码
链接: https://pan.baidu.com/s/1-emUH-DyE4F7aW31r3qY3w 提取码: 2muq 复制这段内容后打开百度网盘手机App,操作更方便哦