前言
半路出家写的java,SpringMVC的原理还不是很通,但是项目需要,需要将项目往SpringCloud服务治理方向走,SpringCloud是基于SpringBoot搭建的,所以要先将SpringMVC的项目先转成SpringBoot
其实SpringBoot和SpringMVC没什么区别,只是SpringBoot是官方推出的简化了Spring项目的过多的繁琐的配置而生的,所以项目转化的核心主要是改配置,将之前Spring的项目的jdbc,mybatis,redis等配置转化成SpringBoot的方式配置,其他的业务逻代码完全是兼容的,直接拷贝过来就可以用了
步骤一: 搭建一个最基础的SpringBoot项目
步骤二: SpringBoot集成数据Mybatis(设计jdbc,duri等)
# 数据库访问配置
spring.datasource.db.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.db.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.db.url=jdbc:mysql://xxxxx.com/wallet_supper?useUnicode=true&characterEncoding=utf8&autoReconnect=true
spring.datasource.db.username=linpeng
spring.datasource.db.password=xxxxx
# 下面为连接池的补充设置,应用到上面所有数据源中
spring.datasource.db.initialSize=25
spring.datasource.db.minIdle=5
spring.datasource.db.maxActive=100
# 配置获取连接等待超时的时间
spring.datasource.db.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.db.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.db.minEvictableIdleTimeMillis=300000
spring.datasource.db.validationQuery=SELECT 1 FROM DUAL
spring.datasource.db.testWhileIdle=true
spring.datasource.db.testOnBorrow=false
spring.datasource.db.testOnReturn=false
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.db.filters=stat,wall,log4j
spring.datasource.db.logSlowSql=true
#################mybatis基础配置#################
mybatis.mapper-locations=classpath*:com/jiuzhm/mybatis/**/*.xml
mybatis.type-aliases-package=com.jiuzhm.mybatis.entity
mybatis.config-location=classpath:mybatis-config.xml
步骤三: SpringBoot集成数据Redis
#################redis基础配置#################
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.pass=
spring.redis.pre=kettle_
spring.redis.maxIdle=300
spring.redis.maxActive=600
spring.redis.maxWait=1000
spring.redis.testOnBorrow=true
-------以上的步骤集成 让项目跑起来难度不大------
步骤四: 把之前项目全部拷贝过来,把之前项目里面的pom依赖包拷贝过来,注意要把Spring相关的依赖包删掉,redis,mybatis也删掉 因为 步骤一,二,三已经集成了相关的依赖了,然后开始一步一步的调试
这里是主要的工作量
注意:
自动配置的问题
pom.xml - properties里面
<spring.version>3.2.2.RELEASE</spring.version>
<jedis.version>2.1.0</jedis.version><mybatis.version>3.2.8</mybatis.version>
<mybatis-spring.version>1.2.2</mybatis-spring.version><jedis.version>2.1.0</jedis.version>
等等...
要注释掉 约定大于配置 内部占用了这个词 还有默认加载进去 就会报错
Redis
1.RedisServcer 类要加@Service 会告诉Spring要他来扫描管理
2.RedisServcer 注释掉构造器redisTemplate类 springboot约定大于配置 内部已经占用 redisTemplate 不能再构造这个方法 否则会启动报错
3.RedisServcer 的redisTemplate属性要用@Resource 不能用@Autuwired springboot约定大于配置 内部已经占用 redisTemplate 可以百度一下
mybatis
吭!xml文件和mapper绑定有问题!
网上看了很多资料最后发现是intellij idea的问题,在eclipse中把mapper的xml文件放到src代码目录下是可以一起打包进classes的,而在新版intellij idea中是不会一起打包,就会导致找不到xml报错。
首先确保xml中的namespace配置是你的接口全类名,而不是包名!
解决方法
由于idea默认是不打包src中的xml文件,所以在eclipse中你可以把xml放到src中没有问题,但是在idea中,你把mapper的xml文件放到resources资源中就可以正常访问!然后配置文件里面要加上
# MyBatis 配置
mybatis.mapper-locations=classpath:mybatis/*.xml mybatis是resource下面的一个目录
mybatis.type-aliases-package=com.jiuzhm.mybatis.entity
Jsp支持+拦截器+全局异常类配置
关键注解:@Configuration @Bean
import com.jiuzhm.Exception.ExceptionHandle;
import com.jiuzhm.interceptor.TokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
/***
* Spring Boot 拦截器配置
*/
@Configuration //标注此文件为一个配置项,spring boot才会扫描到该配置。该注解类似于之前使用xml进行配置
public class ApiInterceptor extends WebMvcConfigurationSupport {
@Autowired
TokenInterceptor tokenInterceptor;//否则TokenInterceptor内部无法使用注入 Autowired
/**
* 配置拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(this.tokenInterceptor).addPathPatterns("/*/**"); //对来自/user/** 这个链接来的请求进行拦截
}
/**
* jsp路径映射
* @param
*/
@Bean
public InternalResourceViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/jsp/");
viewResolver.setSuffix(".jsp");
viewResolver.setViewClass(JstlView.class);
return viewResolver;
}
@Bean
public CommonsMultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
@Bean
public ExceptionHandle exceptionResolver(){
ExceptionHandle exceptionResolver = new ExceptionHandle();
return exceptionResolver;
}
/**
* 静态资源配置
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/frozenui/**").addResourceLocations("classpath:/frozenui/");
registry.addResourceHandler("/web/**").addResourceLocations("/");
super.addResourceHandlers(registry);
}
}
查看原来项目application.xml里面有配置了那些 bean 我们就把这些bean按照上面的@Bean的方式给转换过来就可以了