SpringBoot重构SpringMVC项目

SpringBoot重构SpringMVC项目

最近接手了一个遗留项目,使用SpringMVC框架作为基础架构。在习惯了SpringBoot那种简易清新的风格,再难适应spring的一系列配置文件,于是着手将项目迁移到SpringBoot框架上。遇到一些列的问题,经过不懈努力,总算是勉强达到自己标准。

springboot所需要的包,以及包冲突

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>${spring.boot.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring.boot.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <version>${spring.boot.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>${spring.boot.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <version>${spring.boot.version}</version>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>${druid.version}</version>
</dependency>
<dependency>
    <groupId>io.dubbo.springboot</groupId>
    <artifactId>spring-boot-starter-dubbo</artifactId>
    <version>1.0.0</version>
</dependency>

其中包含mybatis,druid连接池,redis,dubbo的包。基本上能够满足目前主流的开发需要。其他的可在此基础上添加,并删除工程以前的springMVC的包。
在构建是遇到Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError这样的包冲突。
参数原因: 这两个包都是slf4j日志标准api的实现,让程序不知道选择哪一个去实现。(爱的人太多也是一种负担)
解决方法: 排除掉所有包换slf4j-log4j12.jar的包,以前遇到这种问题直接就蒙圈了。自从有了IDEA,这类问题变得so easy。在maven工具箱中,选择 show dependency 工具,如下所示,选择要分析模块,点击图标。
在这里插入图片描述
就会出现该模块的整个包依赖关系。
在这里插入图片描述
找到对应的包,右击,exclude,轻松解决。

SpringMVC模式重构

在以前的MVC模式中,浏览器发送请求到后台,后台完成数据处理,将数封装到model然后定向到页面,完成静态页面封装后,返回到前端。
这种方式的弊端较多,如下:

  1. web容器亚历山大
  2. 响应慢
  3. 无法做到前后端分离

目前的发展趋势是让前端和后端分离,前端开发前端的页面,有数据需要的再通过接口向后台抓。后台就只需要处理数据就OK,不用管前端的页面逻辑。双方按照API进行开发就行。
springboot配置静态资源页面,对该目录下的所有请求放行。

遇到问题: 以前的工程,html页面是放在WEB-INF目录下的,不管我怎样配置,都不能达到效果,参照了以前的项目,创建了一个views,将html文件都放在该目录下。css和js等静态资源文件放在statics目录下。
静态资源配置:

@Component
public class WebMvcConfig implements WebMvcConfigurer {
    

    /**
     * 添加静态资源文件,外部可以直接访问地址
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //其他静态资源,与本文关系不大
        registry.addResourceHandler("/upload/**").addResourceLocations("file:/upload/");

        //需要配置1:----------- 需要告知系统,这是要被当成静态文件的!
        //第一个方法设置访问路径前缀,第二个方法设置资源路径
        registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
        registry.addResourceHandler("/views/**", "/login.html", "/index.html").
                addResourceLocations("classpath:/views/");
    }

继承WebMvcConfigurer接口,重写addResourceHandlers方法,添加静态资源请求的请求及路径。

前端改造

使用jqueryUI + vue.js来实现前端逻辑,放弃了模板引擎。虽然现在的模板引擎实现起来也比较简单,但是调试起来还是很头大,比如说某一个参数的逻辑判断写错了,页面就是显示不出来,上手的时候经常遇到这类问题。使用vue.js后,显得模板引擎已经不是必须品了。
jqueryUI的jqGrid,用起来真的很nice,对于我这种前端小白来说,真是爽得飞起。有兴趣的可深入学习下。
如此,再对工程稍加改造,将前端迁移出来,就可以将前后端分开部署了,再结合node.js或是更简单点,直接开个nginx,就可以释放后端很大一部分压力。对负载高的,可以尝试下,负载低的就没必要了,给运维减轻些工作量。

兼容springMVC配置

由于很多业务代码,是基于spring的bean配置方式,改动起来的代价就比较大了。可以使用import的方式,将以前的bean配置文件引入进来。

@SpringBootApplication
@ImportResource(locations = {"classpath:applicationContext.xml"})
@EnableWebMvc
public class Application extends SpringBootServletInitializer {

	private static final Logger logger = LoggerFactory.getLogger(Application.class);

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		logger.info("system init");
		return application.sources(Application.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

启动类加载applicationContext.xml文件,在applicationContext.xml中加载application.yml配置文件和bean文件。如下所示:

<context:property-placeholder location="classpath:application.yml" ignore-unresolvable="true"/>

<import resource="classpath:spring/application-webstore-service.xml"/>
<import resource="classpath:spring/application-webStore-redis.xml"/>
<import resource="classpath:spring/application-sys-shiro.xml"/>
<import resource="classpath:spring/application-sys-fastdfs.xml"/>

如此,完成springMVC工程的改造。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于Spring的生产级别的应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一种快速开发的方式。在整合Spring MVC项目时,你可以使用Spring Boot的自动配置功能来简化配置。 首先,你需要在pom.xml文件中添加Spring Boot和Spring MVC的依赖。然后,你可以创建一个MVCController类,使用各种注解来接收不同类型的请求。例如,你可以使用@RestController注解来标记该类,并使用@RequestMapping注解来指定请求的路径和请求方法。你还可以使用@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解来指定特定的请求方法。 在处理请求时,你可以返回不同类型的数据。例如,你可以返回字符串,可以使用@RequestMapping注解的value属性来指定返回的字符串。你还可以使用Model对象来传递数据到视图中。 总结起来,整合Spring Boot和Spring MVC项目的步骤包括添加依赖、创建MVCController类并使用注解接收不同类型的请求,以及返回不同类型的数据。这样可以简化配置和开发过程,并提高开发效率。 #### 引用[.reference_title] - *1* [springboot整合springmvc项目](https://blog.csdn.net/bluewelkin/article/details/112470271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [11.4 SpringBoot 整合 SpringMVC](https://blog.csdn.net/Bug_marker/article/details/121418551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [springboot 整合springmvc](https://blog.csdn.net/zxc472504515/article/details/124626824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值