• 将springmvc项目转为springboot项目


    将springmvc项目转为springboot项目

    背景

    因为要转微服务架构,需要将原来的一个springmvc项目放到springcloud的微服务里去,但是springmvc里边的很多配置都是xml配置的,所以想把springmvc转成springboot来放到微服务里去

    解决方案

    因为springmvc项目里都是通过xml文件配置的,配置文件有很多,不可能全部都用java配置类来重写,所以需要想办法通过springboot的注解来加载配置文件

    关键注解:@ImportResource

    1.新建一个配置类ShiroConfiguration,加上@Configuration注解,通过@ImportResource加载spring-shiro.xml配置文件,配置shiro相关信息

    image-20211124210253813

    @Configuration
    @ImportResource(locations={"classpath:spring-shiro.xml"})
    public class ShiroConfiguration {
    }
    

    2.新建一个配置类SpringMybatisConfiguration,加上@Configuration注解,通过@ImportResource加载spring-mybatis.xml配置文件,配置mybatis相关信息

    image-20211124210446635

    只要有需要加载的配置xml文件就新建相关的配置类然后同样的方式扫描该xml文件路径

    3.然后在web的模块下新建springboot启动主程序WebsiteApplication:

    @SpringBootApplication(scanBasePackages = {"shenji.report.analysis.**"})
    @MapperScan("shenji.report.analysis.mapper")
    //@ImportResource("classpath:spring-shiro.xml")
    public class WebsiteApplication {
        public static void main(String[] args) {
            SpringApplication.run(WebsiteApplication.class, args);
        }
    }
    
    @SpringBootApplication(scanBasePackages = {"shenji.report.analysis.**"})
    

    通过scanBasePackages来扫描不同包下需要的类,否则会报错找不到相关包、类,也就无法加载配置文件

    通过@MapperScan("shenji.report.analysis.mapper")来扫描对应的mapper接口所在的包,否则也会报错找不到对应的mapper

    4.然后在web相关的模块下新建application.properties配置服务端口等信息

    遇到的问题

    跟shiro和定时器相关:

    报错:

    java.lang.InstantiationError: org.quartz.SimpleTrigger

    或者:

    java.lang.IncompatibleClassChangeError: Found interface org.quartz.JobExecutionContext, but class was expected

    这些应该都跟shiro和org.quartz版本有关,各种尝试之后都没有解决,最后解决方案:

    引入依赖2.2.1版本的quartz必须是2.*版本以上:

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-quartz</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    然后在spring-shiro.xml里指定id为sessionValidationScheduler的bean的配置改为如下:

      <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
    <!--  <bean id="sessionValidationScheduler" class="shenji.report.analysis.bind.QuartzSessionValidationScheduler">-->
        <!-- 定时清理失效会话, 清理用户直接关闭浏览器造成的孤立会话,单位为毫秒,即默认为3600000 -->
    <!--    <property name="sessionValidationInterval" value="3600000"/>-->
        <property name="interval" value="3600000"/>
        <property name="sessionManager" ref="sessionManager"/>
      </bean>
    

    原来是自己去实现指定的class,都出现了问题,后来指定为shiro自己的ExecutorServiceSessionValidationScheduler问题解决

  • 相关阅读:
    Java编程思想学习(三)----第三章:操作符
    mybatis入门
    responsebody和requestbody的使用
    一个Interface 继承多个Interface 的总结
    requirejs中Shims使用说明
    java 中解析json步骤
    @transient加在属性前的作用
    实现serializable接口的作用
    springmvc源码解析-初始化
    @RequestMapping注解详解
  • 原文地址:https://www.cnblogs.com/RealGang/p/15600181.html
Copyright © 2020-2023  润新知