0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是springBoot业务组件化开发?谈谈SpringBoot业务组件化

jf_ro2CN3Fa 来源:csdn 2023-07-20 11:30 次阅读

1、背景

首先,谈一谈什么是“springBoot业务组件化开发”,最近一直在开发一直面临这一个问题,就是相同的业务场景场景在一个项目中使用了,又需要再另外一个项目中复用,一遍又一遍的复制代码,然后想将该业务的代码在不同的项目中维护起来真的很难。

最开始想用微服务的方式来解决这个问题,但是觉得一套完整的微服务太重,而且目前微服务还处于振荡期(去年的微服务解决方案,今年国内直接都换成了阿里的技术解决方案),此外很多时候我们接私活,就是个单体的springboot项目,用不上微服务这种级别的项目,所以想来想去这条路不是很满足我的需求;再后来,想到单体的聚合架构,但是聚合架构的项目,个人觉得有时候也不是很好,一般的聚合项目就是基于某个具体实例架构下才能使用,换一个架构自己写的业务model就不能用了(比如你在suoyi框架下开发的模块业务包,在guns下可能就直接不能使用了)。

最后,想了一下,能不能单独开发一个项目,这个项目可以自己独立运行(微服务架构下用),也可以在单体项目中直接通过pom引入的方式,然后简单的配置一下,然后直接使用多好;查了一下网上没有现成的技术解决方案,问了同事,他说我这种思想属于SOA的一种实现,同时有第三包和聚合项目的影子在里面。也许有什么更好的技术解决方案,也希望各位能够不吝赐教。

补充一句,之所以说“业务组件化”开发,来源于Vue的思想,希望Java后端开发的业务也可像vue的组件一样去使用,这样多好

2、demo

2-1项目准备

①建一个Java项目项目,结构如下图:

79523374-269e-11ee-962d-dac502259ad0.png

②pom文件如下:



4.0.0


org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE


top.wp
cx-flow
1.0-SNAPSHOT



UTF-8
UTF-8
8.0.17
1.1.21
3.3.2
1.2.70
0.9.1
5.3.7
1.18.12
2.9.2
1.9.6
4.2.0
4.2.0
6.4.3
1.15.6
3.8.0
5.6.23
4.4.6
4.17.6
3.1.57




 

org.springframework.boot
spring-boot-starter-web


 

com.baomidou
mybatis-plus-boot-starter
${mp.version}


 

mysql
mysql-connector-java
${mysql-connector-java.version}


 

com.alibaba
druid
${druid.version}


 

cn.hutool
hutool-all
${hutool.version}


 

org.projectlombok
lombok
${lombok.versin}








src/main/resources
 

**/*.properties
**/*.xml
**/*.yml

false


src/main/java

**/*.xml

false






③配置文件如下:主要是数据库和mybaits-plus的配置(其实可以不用这个配置文件,在这只是为了项目能够独立运行起来)

#服务配置
server:
port:8080
#spring相关配置
spring:
datasource:
driver-class-name:com.mysql.cj.jdbc.Driver
url:jdbc//localhost:3306/cx-xn?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
username:数据库账户
password:数据库密码
servlet:
multipart:
max-request-size:100MB
max-file-size:100MB
jackson:
time-zone:GMT+8
date-format:yyyy-MM-ddHHss.SSS
locale:zh_CN
serialization:
#格式化输出
indent_output:false

#mybaits相关配置
mybatis-plus:
mapper-locations:classpath*:top/wp/cx/**/mapping/*.xml,classpath:/META-INF/modeler-mybatis-mappings/*.xml
configuration:
map-underscore-to-camel-case:true
cache-enabled:true
lazy-loading-enabled:true
multiple-result-sets-enabled:true
log-impl:org.apache.ibatis.logging.stdout.StdOutImpl

global-config:
banner:false
db-config:
id-type:assign_id
table-underline:true
enable-sql-runner:true
configuration-properties:
prefix:
blobType:BLOB
boolValue:TRUE

④启动入口(可以不用写,启动入口存在目的是让项目可以自己跑起来)

packagetop.wp.cx;

importcn.hutool.log.StaticLog;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
publicclassCXApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(CXApplication.class,args);
StaticLog.info(">>>"+CXApplication.class.getSimpleName()+"启动成功!");

}
}

⑤测试:entity、result

packagetop.wp.cx.modular.test.entity;

importcom.baomidou.mybatisplus.annotation.IdType;
importcom.baomidou.mybatisplus.annotation.TableId;
importcom.baomidou.mybatisplus.annotation.TableName;
importlombok.Data;


@Data
@TableName("test")
publicclassTest{

/**
*主键
*/
@TableId(type=IdType.ASSIGN_ID)
privateIntegerid;

/**
*账号
*/
privateStringname;

}
packagetop.wp.cx.modular.test.result;

importlombok.Data;
@Data
publicclassTestResult{

privateIntegerid;

privateStringname;

}

⑥测试mapper、xml、service和controller

packagetop.wp.cx.modular.test.mapper;

importcom.baomidou.mybatisplus.core.mapper.BaseMapper;
importtop.wp.cx.modular.test.entity.Test;

/**
*系统用户数据范围mapper接口
*
*@authorxuyuxiang
*@date2020/3/1315:46
*/
//@Mapper
publicinterfaceTestMapperextendsBaseMapper{
}





packagetop.wp.cx.modular.test.service;

importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
importorg.springframework.stereotype.Service;
importtop.wp.cx.modular.test.entity.Test;
importtop.wp.cx.modular.test.mapper.TestMapper;

/**
*一个service实现
*
*@authoryubaoshan
*@date2020/4/918:11
*/
@Service
publicclassTestServiceextendsServiceImpl{

}
packagetop.wp.cx.modular.test.controller;

importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importtop.wp.cx.modular.test.entity.Test;
importtop.wp.cx.modular.test.service.TestService;

importjavax.annotation.Resource;
importjava.util.List;

/**
*一个示例接口
*
*@authoryubaoshan
*@date2020/4/918:09
*/
@RestController
@RequestMapping("/test")
publicclassTestController{

@Resource
privateTestServicetestService;

@GetMapping("")
publicListtestResult(){
returntestService.list();
}

@GetMapping("/2")
publicStringtestResult2(){
return"22";
}
}

至此项目准备完成,其实就是简单见了一个测试项目,此时如果你按照上面的步骤,写了启动类和配置项信息,项目是可以独立运行的。

2-2项目打包、引入、运行

①将2-1中的测试项目进行打包:install右键第一个选项

7998771c-269e-11ee-962d-dac502259ad0.png

②此时你的本地maven仓库会出现刚才的项目(当然前提是你的idea配置过本地的maven)

7a082f62-269e-11ee-962d-dac502259ad0.png7a2e12ae-269e-11ee-962d-dac502259ad0.png

③新建另外一个项目cx-main

7b31d15e-269e-11ee-962d-dac502259ad0.png

④pom文件如下:注意将你刚才的准备测试的项目引入进来

7b5e56a2-269e-11ee-962d-dac502259ad0.png



4.0.0


org.springframework.boot
spring-boot-starter-parent
2.3.1.RELEASE


top.wp.cx
cx-main
1.0-SNAPSHOT


UTF-8
UTF-8
8.0.17
1.1.21
3.3.2
1.2.70
0.9.1
5.3.7
1.18.12
2.9.2
1.9.6
4.2.0
4.2.0
6.4.3
1.15.6
3.8.0
5.6.23
4.4.6
4.17.6
3.1.57






top.wp
cx-flow
1.0-SNAPSHOT


 

org.springframework.boot
spring-boot-starter-web


 

com.baomidou
mybatis-plus-boot-starter
${mp.version}


 

mysql
mysql-connector-java
${mysql-connector-java.version}


 

com.alibaba
druid
${druid.version}


 

cn.hutool
hutool-all
${hutool.version}


 

org.projectlombok
lombok
${lombok.versin}





 



src/main/resources
 

**/*.properties
**/*.xml
**/*.yml

false


src/main/java

**/*.xml

false





⑤application.yml配置文件 注意xml的扫描

7b82a796-269e-11ee-962d-dac502259ad0.png

#服务配置
server:
port:8081
#spring相关配置
spring:
datasource:
driver-class-name:com.mysql.cj.jdbc.Driver
url:jdbc//localhost:3306/cx-xn?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
username:root
password:root
servlet:
multipart:
max-request-size:100MB
max-file-size:100MB
jackson:
time-zone:GMT+8
date-format:yyyy-MM-ddHHss.SSS
locale:zh_CN
serialization:
#格式化输出
indent_output:false

#mybaits相关配置
mybatis-plus:
#xml文件扫描
mapper-locations:classpath*:top/wp/cx/**/mapping/*.xml,classpath:/META-INF/modeler-mybatis-mappings/*.xml
configuration:
map-underscore-to-camel-case:true
cache-enabled:true
lazy-loading-enabled:true
multiple-result-sets-enabled:true
log-impl:org.apache.ibatis.logging.stdout.StdOutImpl

global-config:
banner:false
db-config:
id-type:assign_id
table-underline:true
enable-sql-runner:true
configuration-properties:
prefix:
blobType:BLOB
boolValue:TRUE

⑥启动入口,注意spring和mapper扫描

7ba9eed2-269e-11ee-962d-dac502259ad0.png

packagetop.wp.cx.main;

importcn.hutool.log.StaticLog;
importorg.mybatis.spring.annotation.MapperScan;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages={"top.wp.cx.modular.test"})//spring扫描
@MapperScan(basePackages={"top.wp.cx.modular.test.**.mapper"})//mybatis扫描mapper
publicclassCXApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(CXApplication.class,args);
StaticLog.info(">>>"+CXApplication.class.getSimpleName()+"启动成功!");
}
}

⑦此时启动cx-main的项目,访问2-1的测试controller能访问成功证明配置正确





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SOA
    SOA
    +关注

    关注

    1

    文章

    282

    浏览量

    27408
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    20064
  • gun
    gun
    +关注

    关注

    0

    文章

    6

    浏览量

    7625
  • SpringBoot
    +关注

    关注

    0

    文章

    173

    浏览量

    162

原文标题:谈谈 SpringBoot 业务组件化开发思路

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SpringBoot中的Druid介绍

    SpringBoot中Druid数据源配置
    发表于 05-07 09:21

    SpringBoot知识总结

    SpringBoot干货学习总结
    发表于 08-01 10:40

    怎么学习SpringBoot

    SpringBoot学习之路(X5)- 整合JPA
    发表于 06-10 14:52

    springboot集成mqtt

    springboot集成mqtt,大纲一.数据入库1.数据入库解决方案二.开发实时订阅发布展示页面1.及时通讯技术2.技术整合
    发表于 07-16 07:53

    怎样去使用springboot

    怎样去使用springboot呢?学习springboot需要懂得哪些?
    发表于 10-25 07:13

    SpringBoot应用启动运行run方法

    )、refreshContext(context);SpringBoot刷新IOC容器【创建IOC容器对象,并初始容器,创建容器中的每一个组件】;如果是web应用创建**AnnotationConfigEmbeddedWebA
    发表于 12-20 06:16

    SpringBoot配置嵌入式Servlet

    SpringBoot配置嵌入式Servlet容器定制和修改Servlet容器相关配置全局配置文件编写WebServerFactoryCustomizer注册Servlet三大组件注册Servlet
    发表于 12-20 06:19

    基于组件业务模型的研究与设计

    业务基础软件平台的基础上提出了一个基于组件业务模型的解决方案。该方案由视图维、通用层次维和生命周期维三个维度组成,运用业务模型驱动模式和基于组件
    发表于 08-04 09:23 10次下载

    深入了解SpringBoot的自动配置原理

    通过这篇文章我们来深入了解SpringBoot的自动配置原理,并分析SpringBoot是如何神不知,鬼不觉的帮我们做了那么多的事情,让我们只需要关心业务逻辑开发就可以了。
    的头像 发表于 04-07 11:22 930次阅读
    深入了解<b class='flag-5'>SpringBoot</b>的自动配置原理

    什么是 SpringBoot

    本文从为什么要有 `SpringBoot`,以及 `SpringBoot` 到底方便在哪里开始入手,逐步分析了 `SpringBoot` 自动装配的原理,最后手写了一个简单的 `start`
    的头像 发表于 04-07 11:28 1258次阅读
    什么是 <b class='flag-5'>SpringBoot</b>?

    SpringBoot常用注解及使用方法1

    基于 SpringBoot 平台开发的项目数不胜数,与常规的基于`Spring`开发的项目最大的不同之处,SpringBoot 里面提供了大量的注解用于快速
    的头像 发表于 04-07 11:51 667次阅读

    SpringBoot的核心注解2

    今天跟大家来探讨下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot为什么不需要XML,达到零配置
    的头像 发表于 04-07 14:34 1921次阅读
    <b class='flag-5'>SpringBoot</b>的核心注解2

    使用springboot完成流程的业务功能

    使用springboot开发流程使用的接口完成流程的业务功能 基于 Spring Boot + MyBatis Plus + Vue Element 实现的后台管理系统 + 用户小程序,支持 RBAC
    的头像 发表于 05-15 17:40 664次阅读
    使用<b class='flag-5'>springboot</b>完成流程的<b class='flag-5'>业务</b>功能

    Springboot项目的集成以及具体使用及配置

      概念 核心组件 API介绍 Springboot集成 具体业务集成 API使用   前言 项目中需要用到工作流引擎来设计部分业务流程,框架选型最终选择了 Camunda7,关于 C
    的头像 发表于 07-03 11:18 1460次阅读
    <b class='flag-5'>Springboot</b>项目的集成以及具体使用及配置

    javaweb和springboot能一起用吗

    JavaWeb 和 SpringBoot 是两种针对 Java 程序开发的框架,它们可以在一起使用。在本文中,我将详细介绍 JavaWeb 和 SpringBoot 的关系,并探讨如何结合使用这两个
    的头像 发表于 11-16 10:54 1987次阅读