V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Geekerstar
V2EX  ›  Java

SpringBoot 项目多模块拆分的问题

  •  
  •   Geekerstar · 2020-02-14 17:53:59 +08:00 · 7871 次点击
    这是一个创建于 1530 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个项目,是个单体项目,不是微服务项目,我想将它按照业务进行多模块拆分,比如有 A,B,C 三个独立业务,每个业务都有自己的 Controller,Service,Mapper,可否将其拆分为三个 Module,但是只有一个启动类呢?有没有比较好的方案呢?我看网上拆分都是按照 MVC 层拆分而不是按照业务拆分?

    19 条回复    2020-03-13 20:39:07 +08:00
    Jacky23333
        1
    Jacky23333  
       2020-02-14 18:16:40 +08:00 via Android
    放进不同的包里
    fantastM
        2
    fantastM  
       2020-02-14 18:21:29 +08:00
    用 maven 内置的 module 就可以吧
    huntcool001
        3
    huntcool001  
       2020-02-14 18:23:57 +08:00
    Maven 的话,做一个 parent pom, 下面 A B C 三个项目是这个 pom 的 module 和子 pom(继承通用的 pom 配置)
    meantobe
        4
    meantobe  
       2020-02-14 18:55:49 +08:00
    大致思路是再建一个 module,引用 A、B、C 三个 module,通过 profile 控制读取不同的 resource,在 resource 中配置 base-package="a/b/c.controller, a/b/c.service, a/b/c.mapper"
    securityCoding
        5
    securityCoding  
       2020-02-14 19:20:43 +08:00
    就是子模块吧 , 扫父类包路径就行了
    pan176
        6
    pan176  
       2020-02-14 20:15:18 +08:00
    只有一个启动类,拆分的意义何在。。。
    paragon
        7
    paragon  
       2020-02-14 20:25:52 +08:00
    设置好 package scan 的包名就好了啊~
    hantsy
        8
    hantsy  
       2020-02-14 20:27:06 +08:00
    yongliu
        9
    yongliu  
       2020-02-14 20:29:16 +08:00
    一个启动类三个 Module 意义何在?
    看你的描述,一个 Module,三个 Controller/Service/Mapper 就行了,没必要分 Module。
    hantsy
        10
    hantsy  
       2020-02-14 20:47:50 +08:00
    如果你愿意可以尝试 Java 9 Module System,Spring 已经全部 Module 化了。另外从 Spring3.x 起 Spring 官方不支持 OSGI,但是 Spring 创建了另外一个项目 Spring Plugin (这个项目现在似乎不活跃了)。
    Fanatique32
        11
    Fanatique32  
       2020-02-14 21:28:32 +08:00
    这样有点像 angularJs 的 module,说是 module 其实是 name_space。
    CoderGeek
        12
    CoderGeek  
       2020-02-14 22:55:03 +08:00
    做多个子模块 有个模块叫 xxx-web 只放启动类和配置文件 打包 web 模块引用其他模块即可
    w292614191
        13
    w292614191  
       2020-02-15 11:41:02 +08:00
    聚合项目吧,我感觉没什么用,看起来舒服点,其实还是相互调用。打包后还是一个 jar。
    sicauxeon
        14
    sicauxeon  
       2020-02-15 14:01:11 +08:00
    一般我们在代码层面上是拆分成 core、facade、repository、api、common、util 等这几个包,通过 gradle 或者 maven 等工具管理项目的生命周期。不要试图按照业务来拆分代码到多个模块上,你的核心领域模型应该放在一个模块中。
    sicauxeon
        15
    sicauxeon  
       2020-02-15 14:08:33 +08:00
    使用一个启动类完全可以,你启动时把相应的 Java bean 都加载进来即可
    javapythongo
        16
    javapythongo  
       2020-02-15 15:28:34 +08:00 via iPhone
    在一个 module 建立不同的包就行了
    Chengxians
        17
    Chengxians  
       2020-02-15 16:16:50 +08:00
    a b c 创建三个模块。启动类 D 中去把 abc 加成一个链一起启动就可以了
    notwaste
        18
    notwaste  
       2020-02-21 11:11:30 +08:00
    按照业务拆分之后进去不还是 mvc 吗,没明白拆分的意义是
    siweipancc
        19
    siweipancc  
       2020-03-13 20:39:07 +08:00 via iPhone
    拆分之后可以做可查拔的模块啊,我就写了全局错误处理直接返回模型给前端,基本的错误码都有对应的内置错误类型。实际操作中直接抛错就是了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1255 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:53 · PVG 01:53 · LAX 10:53 · JFK 13:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.