189 8069 5689

Sprigmvc项目转为springboot的方法

是否有老掉牙的springmvc项目,想转成springboot项目,看这个文章就对了。

成都创新互联-专业网站定制、快速模板网站建设、高性价比合作网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式合作网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖合作地区。费用合理售后完善,十年实体公司更值得信赖。

说明

如果你的项目连maven项目都不是,请自行转为maven项目,在按照本教程进行。

本教程适用于spring+springmvc+mybatis+shiro的maven项目。

1.修改pom文件依赖

删除之前的spring依赖,添加springboot依赖


    org.springframework.boot
    spring-boot-starter-parent
    1.5.9.RELEASE


    
      org.springframework.boot
      spring-boot-starter
    

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

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

    
    
    
      org.springframework.boot
      spring-boot-starter-tomcat
      
    
    
      org.mybatis.spring.boot
      mybatis-spring-boot-starter
      1.3.0
    
    
      org.springframework.boot
      spring-boot-devtools
      true
    
    
    
      org.springframework.boot
      spring-boot-configuration-processor
      true
    
 
  org.apache.tomcat.embed
  tomcat-embed-jasper
 


添加springboot构建插件


  
    org.apache.maven.plugins
    maven-compiler-plugin
    
      1.7
      1.7
    
  
  
    org.springframework.boot
    spring-boot-maven-plugin
    1.5.9.RELEASE
    
      
        
          repackage
        
      
    
  

2.添加application启动文件

注意,如果Application在controller,service,dao的上一层包里,无需配置 @ComponentScan ,

否则,需要指明要扫描的包。

@SpringBootApplication
//@ComponentScan({"com.cms.controller","com.cms.service","com.cms.dao"})
public class Applicationextends SpringBootServletInitializer{

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
    return application.sources(Application.class);
  }

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

3.添加springboot配置文件

在resources下面添加application.properties文件

添加基本配置
#默认前缀
server.contextPath=/
# 指定环境
spring.profiles.active=local
# jsp配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#log配置文件
logging.config=classpath:logback-cms.xml
#log路径
logging.path=/Users/mac/work-tommy/cms-springboot/logs/
#数据源
spring.datasource.name=adminDataSource
spring.datasource.driverClassName = com.MySQL.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mycms?useUnicode=true&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 123456

4.使用@Configuration注入配置

注入mybatis配置,分页插件请自主选择

@Configuration
@MapperScan(basePackages = "com.kuwo.dao",sqlSessionTemplateRef = "adminSqlSessionTemplate")
public class AdminDataSourceConfig{

  @Bean(name = "adminDataSource")
  @ConfigurationProperties(prefix = "spring.datasource")
  @Primary
  public DataSource adminDataSource(){
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "adminSqlSessionFactory")
  @Primary
  public SqlSessionFactory adminSqlSessionFactory(@Qualifier("adminDataSource")DataSource dataSource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    //分页插件
// PageHelper pageHelper = new PageHelper();
    PagePlugin pagePlugin = new PagePlugin();
// Properties props = new Properties();
// props.setProperty("reasonable", "true");
// props.setProperty("supportMethodsArguments", "true");
// props.setProperty("returnPageInfo", "check");
// props.setProperty("params", "count=countSql");
// pageHelper.setProperties(props);
    //添加插件
    bean.setPlugins(new Interceptor[]{pagePlugin});
    // 添加mybatis配置文件
    bean.setConfigLocation(new DefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));
    // 添加mybatis映射文件
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/system/*.xml"));
    return bean.getObject();
  }

  @Bean(name = "adminTransactionManager")
  @Primary
  public DataSourceTransactionManager adminTransactionManager(@Qualifier("adminDataSource")DataSource dataSource){
    return new DataSourceTransactionManager(dataSource);
  }

  @Bean(name = "adminSqlSessionTemplate")
  @Primary
  public SqlSessionTemplate adminSqlSessionTemplate(@Qualifier("adminSqlSessionFactory")SqlSessionFactory sqlSessionFactory)throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
  }
}

添加Interceptor配置,注意addInterceptor的顺序,不要搞乱了

@Configuration
public class InterceptorConfigurationextends WebMvcConfigurerAdapter{
  @Override
  public void addInterceptors(InterceptorRegistry registry){
    registry.addInterceptor(new LoginHandlerInterceptor());
  }
}

添加shiro配置文件

注意:本来使用redis做session缓存,但是和shiro集成发现一个问题,user对象存储以后,从shiro中获取后,无法进行类型转换,所以暂时放弃了redis做session缓存。

@Configuration
public class ShiroConfiguration{
  @Value("${spring.redis.host}")
  private String host;

  @Value("${spring.redis.port}")
  private int port;

  @Value("${spring.redis.timeout}")
  private int timeout;
  @Bean
  public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor(){
    return new LifecycleBeanPostProcessor();
  }

  /**
   * ShiroFilterFactoryBean 处理拦截资源文件问题。
   * 注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在
   * 初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager
   *
   Filter Chain定义说明
   1、一个URL可以配置多个Filter,使用逗号分隔
   2、当设置多个过滤器时,全部验证通过,才视为通过
   3、部分过滤器可指定参数,如perms,roles
   *
   */
  @Bean
  public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){
    System.out.println("ShiroConfiguration.shirFilter()");
    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

    // 必须设置 SecurityManager
    shiroFilterFactoryBean.setSecurityManager(securityManager);
    // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
    shiroFilterFactoryBean.setLoginUrl("/login_toLogin");
    // 登录成功后要跳转的链接
    shiroFilterFactoryBean.setSuccessUrl("/usersPage");
    //未授权界面;
    shiroFilterFactoryBean.setUnauthorizedUrl("/403");
    //拦截器.
    Map filterChainDefinitionMap = new LinkedHashMap<>();

    //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
    filterChainDefinitionMap.put("/logout", "logout");
    filterChainDefinitionMap.put("/login_toLogin", "anon");
    filterChainDefinitionMap.put("/login_login", "anon");
    filterChainDefinitionMap.put("/static/login/**","anon");
    filterChainDefinitionMap.put("/static/js/**","anon");
    filterChainDefinitionMap.put("/uploadFiles/uploadImgs/**","anon");
    filterChainDefinitionMap.put("/code.do","anon");
    filterChainDefinitionMap.put("/font-awesome/**","anon");
    //:这是一个坑呢,一不小心代码就不好使了;
    //

    filterChainDefinitionMap.put("/**", "authc");


    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
    return shiroFilterFactoryBean;
  }


  @Bean
  public SecurityManager securityManager(){
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    //设置realm.
    securityManager.setRealm(myShiroRealm());
    // 自定义缓存实现 使用redis
    //securityManager.setCacheManager(cacheManager());
    // 自定义session管理 使用redis
    securityManager.setSessionManager(sessionManager());
    return securityManager;
  }

  @Bean
  public ShiroRealm myShiroRealm(){
    ShiroRealm myShiroRealm = new ShiroRealm();
// myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
    return myShiroRealm;
  }

}
  /**
   * 开启shiro aop注解支持.
   * 使用代理方式;所以需要开启代码支持;
   * @param securityManager
   * @return
   */
  @Bean
  public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
  }

  /**
   * 配置shiro redisManager
   * 使用的是shiro-redis开源插件
   * @return
   */
  public RedisManager redisManager(){
    RedisManager redisManager = new RedisManager();
    redisManager.setHost(host);
    redisManager.setPort(port);
    redisManager.setExpire(1800);
    redisManager.setTimeout(timeout);
    // redisManager.setPassword(password);
    return redisManager;
  }

  /**
   * cacheManager 缓存 redis实现
   * 使用的是shiro-redis开源插件
   * @return
   */
  public RedisCacheManager cacheManager(){
    RedisCacheManager redisCacheManager = new RedisCacheManager();
    redisCacheManager.setRedisManager(redisManager());
    return redisCacheManager;
  }

  /**
   * RedisSessionDAO shiro sessionDao层的实现 通过redis
   * 使用的是shiro-redis开源插件
   */
  @Bean
  public RedisSessionDAO redisSessionDAO(){
    RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
    redisSessionDAO.setRedisManager(redisManager());
    return redisSessionDAO;
  }

  @Bean
  public DefaultWebSessionManager sessionManager(){
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// sessionManager.setSessionDAO(redisSessionDAO());
    return sessionManager;
  }

}

总结

搞了一天时间把项目转成springboot,查阅各种资料,希望这篇文章能够为你带来帮助。也希望大家多多支持创新互联。


网站栏目:Sprigmvc项目转为springboot的方法
网页链接:http://cdxtjz.cn/article/ihigds.html

其他资讯