Sprigmvc项目转为springboot的方法
是否有老掉牙的springmvc项目,想转成springboot项目,看这个文章就对了。
说明
如果你的项目连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 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"}) publicclassApplicationextendsSpringBootServletInitializer{ @Override protectedSpringApplicationBuilderconfigure(SpringApplicationBuilderapplication){ returnapplication.sources(Application.class); } publicstaticvoidmain(String[]args)throwsException{ 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") publicclassAdminDataSourceConfig{ @Bean(name="adminDataSource") @ConfigurationProperties(prefix="spring.datasource") @Primary publicDataSourceadminDataSource(){ returnDataSourceBuilder.create().build(); } @Bean(name="adminSqlSessionFactory") @Primary publicSqlSessionFactoryadminSqlSessionFactory(@Qualifier("adminDataSource")DataSourcedataSource)throwsException{ SqlSessionFactoryBeanbean=newSqlSessionFactoryBean(); bean.setDataSource(dataSource); //分页插件 //PageHelperpageHelper=newPageHelper(); PagePluginpagePlugin=newPagePlugin(); //Propertiesprops=newProperties(); //props.setProperty("reasonable","true"); //props.setProperty("supportMethodsArguments","true"); //props.setProperty("returnPageInfo","check"); //props.setProperty("params","count=countSql"); //pageHelper.setProperties(props); //添加插件 bean.setPlugins(newInterceptor[]{pagePlugin}); //添加mybatis配置文件 bean.setConfigLocation(newDefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml")); //添加mybatis映射文件 bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath:mybatis/system/*.xml")); returnbean.getObject(); } @Bean(name="adminTransactionManager") @Primary publicDataSourceTransactionManageradminTransactionManager(@Qualifier("adminDataSource")DataSourcedataSource){ returnnewDataSourceTransactionManager(dataSource); } @Bean(name="adminSqlSessionTemplate") @Primary publicSqlSessionTemplateadminSqlSessionTemplate(@Qualifier("adminSqlSessionFactory")SqlSessionFactorysqlSessionFactory)throwsException{ returnnewSqlSessionTemplate(sqlSessionFactory); } }
添加Interceptor配置,注意addInterceptor的顺序,不要搞乱了
@Configuration publicclassInterceptorConfigurationextendsWebMvcConfigurerAdapter{ @Override publicvoidaddInterceptors(InterceptorRegistryregistry){ registry.addInterceptor(newLoginHandlerInterceptor()); } }
添加shiro配置文件
注意:本来使用redis做session缓存,但是和shiro集成发现一个问题,user对象存储以后,从shiro中获取后,无法进行类型转换,所以暂时放弃了redis做session缓存。
@Configuration publicclassShiroConfiguration{ @Value("${spring.redis.host}") privateStringhost; @Value("${spring.redis.port}") privateintport; @Value("${spring.redis.timeout}") privateinttimeout; @Bean publicstaticLifecycleBeanPostProcessorgetLifecycleBeanPostProcessor(){ returnnewLifecycleBeanPostProcessor(); } /** *ShiroFilterFactoryBean处理拦截资源文件问题。 *注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在 *初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager * FilterChain定义说明 1、一个URL可以配置多个Filter,使用逗号分隔 2、当设置多个过滤器时,全部验证通过,才视为通过 3、部分过滤器可指定参数,如perms,roles * */ @Bean publicShiroFilterFactoryBeanshiroFilter(SecurityManagersecurityManager){ System.out.println("ShiroConfiguration.shirFilter()"); ShiroFilterFactoryBeanshiroFilterFactoryBean=newShiroFilterFactoryBean(); //必须设置SecurityManager shiroFilterFactoryBean.setSecurityManager(securityManager); //如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面 shiroFilterFactoryBean.setLoginUrl("/login_toLogin"); //登录成功后要跳转的链接 shiroFilterFactoryBean.setSuccessUrl("/usersPage"); //未授权界面; shiroFilterFactoryBean.setUnauthorizedUrl("/403"); //拦截器. MapfilterChainDefinitionMap=newLinkedHashMap<>(); //配置退出过滤器,其中的具体的退出代码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); returnshiroFilterFactoryBean; } @Bean publicSecurityManagersecurityManager(){ DefaultWebSecurityManagersecurityManager=newDefaultWebSecurityManager(); //设置realm. securityManager.setRealm(myShiroRealm()); //自定义缓存实现使用redis //securityManager.setCacheManager(cacheManager()); //自定义session管理使用redis securityManager.setSessionManager(sessionManager()); returnsecurityManager; } @Bean publicShiroRealmmyShiroRealm(){ ShiroRealmmyShiroRealm=newShiroRealm(); //myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher()); returnmyShiroRealm; } } /** *开启shiroaop注解支持. *使用代理方式;所以需要开启代码支持; *@paramsecurityManager *@return */ @Bean publicAuthorizationAttributeSourceAdvisorauthorizationAttributeSourceAdvisor(SecurityManagersecurityManager){ AuthorizationAttributeSourceAdvisorauthorizationAttributeSourceAdvisor=newAuthorizationAttributeSourceAdvisor(); authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); returnauthorizationAttributeSourceAdvisor; } /** *配置shiroredisManager *使用的是shiro-redis开源插件 *@return */ publicRedisManagerredisManager(){ RedisManagerredisManager=newRedisManager(); redisManager.setHost(host); redisManager.setPort(port); redisManager.setExpire(1800); redisManager.setTimeout(timeout); //redisManager.setPassword(password); returnredisManager; } /** *cacheManager缓存redis实现 *使用的是shiro-redis开源插件 *@return */ publicRedisCacheManagercacheManager(){ RedisCacheManagerredisCacheManager=newRedisCacheManager(); redisCacheManager.setRedisManager(redisManager()); returnredisCacheManager; } /** *RedisSessionDAOshirosessionDao层的实现通过redis *使用的是shiro-redis开源插件 */ @Bean publicRedisSessionDAOredisSessionDAO(){ RedisSessionDAOredisSessionDAO=newRedisSessionDAO(); redisSessionDAO.setRedisManager(redisManager()); returnredisSessionDAO; } @Bean publicDefaultWebSessionManagersessionManager(){ DefaultWebSessionManagersessionManager=newDefaultWebSessionManager(); //sessionManager.setSessionDAO(redisSessionDAO()); returnsessionManager; } }
总结
搞了一天时间把项目转成springboot,查阅各种资料,希望这篇文章能够为你带来帮助。也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。