FineReport的SpringBoot整合方案

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

背景

公司项目传统的tomcat方式运行,需要改造成springBoot的体系。对于改造这东西听着就知道会有不少坑,何况还有很多公司自研的框架在里面。处理掉web.xml变成@EnableMVC自动配置就花了我不少时间分析和改造公司自研的CGI框架。后来发现fineReport的坑也不小,花了很多时间寻找解决方案索性顺利解决,分享给后面需要的人尽量少走坑。

场景分析

Tomcat方式运行的项目是本地开发和生产部署都运行在tomcat中间件中,FineReport的资源文件统一放在webapp/WEB-INF/目录下最终一起打包到war里面。fr(fineReport缩写)采用WEB-INF目录配置很好的融合了tomcat为构建基础的项目并尽可能做到配置傻瓜化。

现在的微服务框架springboot采用的内置tomcat方式本地直接run mainclass和生产环境可执行jar(或war)方式运行,已经没有webapp目录也没有war包部署tomcat,所以面临几个问题:

  • 1、原来在web.xml里面配置fr的ReportServlet如何在springboot里面配置?
  • 2、fr的resources、reportlets、lib、plugins这些资源文件springboot项目如何存放?
  • 3、fr的资源文件如何打包配置?生产环境如何?
  • 4、可执行jar和war是否支持fr的资源读取?之前就遇到很多坑。
  • 5、本地开发测试如何运行fr环境?

找了大量资料得出两个解决方向:

  • 半SpringBoot方式融合webapp目录war方式部署到tomcat中,本地springboot插件命令:maven springboot:run运行。
  • 完全SpringBoot可执行jar或war部署,本地采用run mainClass方式运行。

详细解决方案

以war方式部署到tomcat中运行、本地采用springboot:run运行

1、保留src/main/webapp/WEB-INF/目录,即保留fr的资源文件。

FineReport的SpringBoot整合方案_第1张图片

2、在maven pom.xml中配置spring-boot-maven-plugin,一般默认打包会把webapp/WEB-INF目录打包到war中,不行就自己配置个。配置maven-war-plugin设置不需要web.xml为必须。


	
		
			org.springframework.boot
			spring-boot-maven-plugin
			
				true
				com.isesol.rent.platform.RentApplication
				-Dfile.encoding=UTF-8
			
		
		
			maven-war-plugin
			
				false
			
		
	
	ROOT
	
		
		src/main/resources
		true
		
	

3、配置maven的systemPath加载本地jar方式处理fr的lib/*.jar问题,或者你把jar上传到自己公司的nexus上在配置pom也行。


	com.fr
	fr-third
	8.0
	system
	${basedir}/src/main/webapp/WEB-INF/lib/fr-third-8.0.jar

4、springboot的web配置。

war

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


	org.springframework.boot
	spring-boot-starter-tomcat
	provided

5、采用SpringBoot的ServletRegistrationBean和@Bean配置ReportServlet,可以配置在Applicaiton中也可以配置在mvc的配置文件里面。

@Configuration
@EnableWebMvc
public class MvcConfig {
	@Bean
	public ServletRegistrationBean frReportServlet() {
		ServletRegistrationBean bean1 = new ServletRegistrationBean(new ReportServlet(),"/ReportServer");
		bean1.setLoadOnStartup(0);
		bean1.setName("ReportServlet");
	return bean1;
	}
}

6、maven插件命令:maven springboot:run 运行本地开发;

FineReport的SpringBoot整合方案_第2张图片

7、采用maven package构建war包部署到tomcat/webapp目录下。

可执行jar或war直接提供服务,本地直接run mainClass开发测试

其他配置和上面一样,目前还在解决fr的资源加载bug,会持续研究。

FineReport的SpringBoot整合方案_第3张图片


作者:Owen Jia,推荐关注他的博客:Owen Blog 。

转载于:https://my.oschina.net/timestorm/blog/2990902

你可能感兴趣的:(FineReport的SpringBoot整合方案)