spring boot项目多个web模块以及web模块复用问题

我们想从网上找一个现成开源的后台管理框架,几经比较,选中若依(ruoyi),技术栈与我们当前所用非常接近,MIT许可,相当宽松,完全开源和免费。而且,里面的功能看上去非常棒,赶紧给她投了一票。

我下载的是多模块版本。多模块好处多多,利于分开开发,代码也有一定的隔离性。在应用该框架的过程中,也很自然的想实施这一思想:新增的业务管理模块,应当与原先的模块分开。但这样的话,就会有一个spring boot项目存在多个WEB模块的局面了。多个WEB模块,究竟如何共存?或者说,如何集成在一起?或者说,我新开发的WEB模块,如何才能直接使用框架中现有的成果?

如果是非web模块,这很容易理解,无非就是import罢了,在代码中引用,无非引用它的函数,方法,构造其中的实例,等等。但是WEB呢?有控制器,有模板,有静态文件,如CSS,JS之类,这些怎么引用?

答案是可以引用。方法是在Application里@import web模块.class。

拿本例来说,代码结构:
在这里插入图片描述
其中,ruoyi-admin是ruoyi框架固有的WEB模块。整个框架提供了用户管理,菜单管理,字典、日志等各种功能,那么我们只需添加业务部分的管理功能即可。这部分新增的功能存放在"business",也是一个web模块。business代码结构:
在这里插入图片描述
可以说这是很典型的spring boot项目结构了。

就在这个新增的模块中,引用框架固有的WEB模块:ruoyi-admin。

1、首先,修改business的pom.xml,添加对ruoyi-admin的引用:

<dependency>
	<groupId>com.ruoyi</groupId>
	<artifactId>ruoyi-admin</artifactId>
	<version>4.1.0</version>
	<scope>compile</scope>
</dependency>

2、修改business的启动程序BusinessApplication

/**
 * 启动程序
 * 
 * @author chenqu
 */
 //RuoYiApplication是ruoyi-admin的启动程序
@Import(RuoYiApplication.class)//<!-----------就是这一句了
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class BusinessApplication extends SpringBootServletInitializer {
    public static void main(String[] args){
        SpringApplication.run(BusinessApplication.class, args);
        System.out.println("============= 业务管理后台启动成功 =============\n");
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(BusinessApplication.class);
    }
}

这样子启动BusinessApplication后,就既有固有模块,又有新增模块。启动之后,business的resources与ruoyi-admin的resources合在一起(可见resources真的是被当作资源文件来看待,应该是被编译进jar包的)。所以,business如果需要新增资源文件,应该避免与ruoyi-admin的重名。

这种方式,基本上不改动框架固有代码,只在新增模块里想办法,符合开闭原则,代码又有非常清晰的区隔性,我很满意。

相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页