我们想从网上找一个现成开源的后台管理框架,几经比较,选中若依(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的重名。
这种方式,基本上不改动框架固有代码,只在新增模块里想办法,符合开闭原则,代码又有非常清晰的区隔性,我很满意。