將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問題解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM