流程:
总的来讲,迁移哪一层就看哪一层的spring配置文件,就是将spring-***.xml文件中的bean作为类,需要的东西作为成员变量注入进去。
被注入的bean一定要有方法带上@Bean标签,其中set上响应的属性
1. pom依赖迁移
将pom包迁移到新的项目中,将spring相关、junit相关、mybatis相关的省略,其余的直接粘贴过来
2. dao层迁移
主从库貌似springboot不是很支持;
将mybatis、logback以及图片直接复制过来;
创建config.dao的package,迁移其中的datasource、sessionFactory,将其中的变量写在application文件中,以@Value的方式读取;
迁移dao、bean和mapper;
复制一个test用于测试迁移是否成功,注意,因为没有了xml文件,所以test也不必再继承baseTest,但是要加上两个标签:
@RunWith(SpringRunner.class)
@SpringBootTest
然后迁移所有的其他dao测试类;
3. service层迁移
创建config.service的package,完成其中的transactionManager的配置;
service层用到了redis,所以首先转移redis.properties中的配置到application文件,然后将cache包下的文件直接复制过来;
迁移dto、service、enums、exceptions、Util;
做ut测试,两个,分别测试事务和缓存redis;
4. web层迁移
创建config.web的package,完成其中相关解析器的配置;
复制web包;
5. 前端页面迁移
将webapp复制过来;
验证码的迁移。之前kaptcha是在web.xml中配置的,但是在springboot项目中并没有出现web.xml,所以要以代码的形式配置。在application.propertirs中将kaptcha属性设置好,直接在代码中读取;
docbase图片地址,之前是在servlet.xml中添加docbase设置静态资源的绝对路径。现在由于springboot是内置tomcat,所以要写代码实现。在mvcConfiguration中的addResourceHandlers中配置。但是图片显示还是有问题!!!;
6. 拦截器迁移
还是在mvcConfiguration中添加一个addInterceptors方法,
遇到的问题:
1. 在最开始创建spring boot项目的时候,显示 cannot download ‘https://start.spring.io’:start.spring.io 错误
解决方法:最开始用的是学校portal网,切换成mobile即可
2. 在启动springboot之后,报错intellij idea springboot mybatis 配置文件找不到Failed to configure a DataSource:.....
解决方法:https://www.cnblogs.com/AFan-z/p/11220384.html
这里我们采用了在Application.java中
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
3. 在启动之后,在地址框中输入url报异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
解决方法:将@RequestMapping中的name属性改成value
4. 测试dao是否迁移成功(IAreaTest)时报错Error creating bean with name 'sqlSessionFactory'
解决方法:查看报错信息,发现是因为出现了jdbc.properties文件找不到而报错的。删除该语句。
5. 测试service迁移结果时,发现jedisPool为空,一直报空指针异常,找不到org.apache.commons.pool2.impl.GenericObjectPoolConfig
解决方法:应该是maven依赖的问题。。。。莫名其妙就好了
6. 在测试web层迁移的结果时,启动springboot后出现了404错误
解决方法:...也是过一会就好了,不能用@RestController注释,一定要用@Controller+@RequestMapping
7. servlet相当于是个bean
重难点:
1. @RestController标签:
结合了@responseBody和@Controller两个标签,表示该类下的所有方法返回的东西会以json形式返回。
2. @Configuration标签:
其实所有的标签都是用来往容器里面写配置。该标签就是表明写进ioc容器里
3. @MapperScan标签:
对应之前ssm配置中的mybatis.spring.mapperScannerConfigurer,即配置mybatis的扫描路径
4. 在sqlsessionFactory中的变量存在静态的变量,静态变量不能直接从application properties中获取,要写setter,将@Value标签打在setter上,并将setter的static去掉
5. 在service层的迁移中,不用定义扫描全部的类,因为启动类中只要有@SpringBootApplication标签,就会自动做全package的扫描
6. 只有@Configuration文件才能读取到application.properties文件中的配置信息