Sprigmvc項(xiàng)目轉(zhuǎn)為springboot的方法
是否有老掉牙的springmvc項(xiàng)目,想轉(zhuǎn)成springboot項(xiàng)目,看這個(gè)文章就對(duì)了。
說(shuō)明
如果你的項(xiàng)目連maven項(xiàng)目都不是,請(qǐng)自行轉(zhuǎn)為maven項(xiàng)目,在按照本教程進(jìn)行。
本教程適用于spring+springmvc+mybatis+shiro的maven項(xiàng)目。
1.修改pom文件依賴(lài)
刪除之前的spring依賴(lài),添加springboot依賴(lài)
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 這個(gè)是剔除掉自帶的 tomcat部署的--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- tomcat容器部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--<scope>compile</scope>--> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <!-- 支持 @ConfigurationProperties 注解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> </dependencies>
添加springboot構(gòu)建插件
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.9.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins>
2.添加application啟動(dòng)文件
注意,如果Application在controller,service,dao的上一層包里,無(wú)需配置 @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文件
添加基本配置 #默認(rèn)前綴 server.contextPath=/ # 指定環(huán)境 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/ #數(shù)據(jù)源 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配置,分頁(yè)插件請(qǐng)自主選擇
@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); //分頁(yè)插件 // 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配置文件
注意:本來(lái)使用redis做session緩存,但是和shiro集成發(fā)現(xiàn)一個(gè)問(wèn)題,user對(duì)象存儲(chǔ)以后,從shiro中獲取后,無(wú)法進(jìn)行類(lèi)型轉(zhuǎn)換,所以暫時(shí)放棄了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 處理攔截資源文件問(wèn)題。 * 注意:?jiǎn)为?dú)一個(gè)ShiroFilterFactoryBean配置是或報(bào)錯(cuò)的,因?yàn)樵? * 初始化ShiroFilterFactoryBean的時(shí)候需要注入:SecurityManager * Filter Chain定義說(shuō)明 1、一個(gè)URL可以配置多個(gè)Filter,使用逗號(hào)分隔 2、當(dāng)設(shè)置多個(gè)過(guò)濾器時(shí),全部驗(yàn)證通過(guò),才視為通過(guò) 3、部分過(guò)濾器可指定參數(shù),如perms,roles * */ @Bean public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager){ System.out.println("ShiroConfiguration.shirFilter()"); ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); // 必須設(shè)置 SecurityManager shiroFilterFactoryBean.setSecurityManager(securityManager); // 如果不設(shè)置默認(rèn)會(huì)自動(dòng)尋找Web工程根目錄下的"/login.jsp"頁(yè)面 shiroFilterFactoryBean.setLoginUrl("/login_toLogin"); // 登錄成功后要跳轉(zhuǎn)的鏈接 shiroFilterFactoryBean.setSuccessUrl("/usersPage"); //未授權(quán)界面; shiroFilterFactoryBean.setUnauthorizedUrl("/403"); //攔截器. Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>(); //配置退出 過(guò)濾器,其中的具體的退出代碼Shiro已經(jīng)替我們實(shí)現(xiàn)了 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"); //<!-- 過(guò)濾鏈定義,從上向下順序執(zhí)行,一般將 /**放在最為下邊 -->:這是一個(gè)坑呢,一不小心代碼就不好使了; //<!-- authc:所有url都必須認(rèn)證通過(guò)才可以訪問(wèn); anon:所有url都都可以匿名訪問(wèn)--> filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } @Bean public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //設(shè)置realm. securityManager.setRealm(myShiroRealm()); // 自定義緩存實(shí)現(xiàn) 使用redis //securityManager.setCacheManager(cacheManager()); // 自定義session管理 使用redis securityManager.setSessionManager(sessionManager()); return securityManager; } @Bean public ShiroRealm myShiroRealm(){ ShiroRealm myShiroRealm = new ShiroRealm(); // myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher()); return myShiroRealm; } } /** * 開(kāi)啟shiro aop注解支持. * 使用代理方式;所以需要開(kāi)啟代碼支持; * @param securityManager * @return */ @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){ AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); return authorizationAttributeSourceAdvisor; } /** * 配置shiro redisManager * 使用的是shiro-redis開(kāi)源插件 * @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實(shí)現(xiàn) * 使用的是shiro-redis開(kāi)源插件 * @return */ public RedisCacheManager cacheManager(){ RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(redisManager()); return redisCacheManager; } /** * RedisSessionDAO shiro sessionDao層的實(shí)現(xiàn) 通過(guò)redis * 使用的是shiro-redis開(kāi)源插件 */ @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; } }
總結(jié)
搞了一天時(shí)間把項(xiàng)目轉(zhuǎn)成springboot,查閱各種資料,希望這篇文章能夠?yàn)槟銕?lái)幫助。也希望大家多多支持腳本之家。
- 詳解在Spring MVC或Spring Boot中使用Filter打印請(qǐng)求參數(shù)問(wèn)題
- SpringBoot中通過(guò)實(shí)現(xiàn)WebMvcConfigurer參數(shù)校驗(yàn)的方法示例
- Spring Boot配置接口WebMvcConfigurer的實(shí)現(xiàn)
- 基于MockMvc進(jìn)行springboot調(diào)試(SpringbootTest)
- SpringMvc/SpringBoot HTTP通信加解密的實(shí)現(xiàn)
- springboot+springmvc+mybatis項(xiàng)目整合
- spring boot與spring mvc的區(qū)別及功能介紹
- Maven工程搭建spring boot+spring mvc+JPA的示例
- Springboot自定義mvc組件如何實(shí)現(xiàn)
相關(guān)文章
SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法
本文主要介紹了SpringBoot中@ConfigurationProperties實(shí)現(xiàn)配置自動(dòng)綁定的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Java嵌入式開(kāi)發(fā)的優(yōu)勢(shì)及有點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家整理了關(guān)于Java嵌入式開(kāi)發(fā)的優(yōu)勢(shì)及相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2022-11-11詳解Java8與Runtime.getRuntime().availableProcessors()
這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06java并發(fā)之ArrayBlockingQueue詳細(xì)介紹
這篇文章主要介紹了java并發(fā)之ArrayBlockingQueue詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-05-05java泛型的局限探究及知識(shí)點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于java泛型的局限探究及知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07Spring Security Oauth2.0 實(shí)現(xiàn)短信驗(yàn)證碼登錄示例
本篇文章主要介紹了Spring Security Oauth2.0 實(shí)現(xiàn)短信驗(yàn)證碼登錄示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01