博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何将springmvc项目转为springboot
阅读量:6682 次
发布时间:2019-06-25

本文共 10513 字,大约阅读时间需要 35 分钟。

手把手教你把sprigmvc项目转为springboot

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

说明

  • 如果你的项目连maven项目都不是,请自行转为maven项目,在按照本教程进行。
  • 本教程适用于spring+springmvc+mybatis+shiro的maven项目。

1.修改pom文件依赖

  1. 删除之前的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
复制代码
  1. 添加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 Application extends 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配置文件

  1. 在resources下面添加application.properties文件
  2. 添加基本配置
#默认前缀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=adminDataSourcespring.datasource.driverClassName = com.mysql.jdbc.Driverspring.datasource.url = jdbc:mysql://localhost:3306/mycms?useUnicode=true&autoReconnect=true&characterEncoding=utf-8spring.datasource.username = rootspring.datasource.password = 123456复制代码

4.使用@Configuration注入配置

  1. 注入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);    }}复制代码
  1. 添加Interceptor配置,注意addInterceptor的顺序,不要搞乱了
@Configurationpublic class InterceptorConfiguration extends WebMvcConfigurerAdapter{    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new LoginHandlerInterceptor());    }}复制代码
  1. 添加shiro配置文件
    • 注意:本来使用redis做session缓存,但是和shiro集成发现一个问题,user对象存储以后,从shiro中获取后,无法进行类型转换,所以暂时放弃了redis做session缓存。
@Configurationpublic 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,查阅各种资料,希望这篇文章能够为你带来帮助。

如果文章对你有帮助,请去我的博客留个言吧!

转载于:https://juejin.im/post/5b68efb26fb9a04fa25a0165

你可能感兴趣的文章
swt定时器的实现 .
查看>>
exchange2010赋予普通用户新建和删除邮箱的权限
查看>>
CRS-0215: Could not start resource 'ora.DB.DB2.inst'
查看>>
图片里的英语
查看>>
iscsi客户端配置
查看>>
用Windows Server实现软件定义存储之存储空间直连
查看>>
花(cnm加强)
查看>>
有用J2ee学习资料下载地址
查看>>
如何对Redis设置密码,提高安全性
查看>>
cognos如何制作维表左关联事实表的报表
查看>>
Android基础(五) – Service生命周期及启动方式
查看>>
Nginx反向代理后端多节点下故障节点的排除思路
查看>>
error: No curses/termcap library found
查看>>
android之shape使用
查看>>
Java八大基本数据类型
查看>>
yum安装JDK
查看>>
C#中Dictionary的用法及用途
查看>>
BizTalkServer 如何接收 EDI 消息(7)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>