ssm改造spring boot项目的方法是什么
知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个文章开发实战,手把手教大家学习《ssm改造spring boot项目的方法是什么》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
添加依赖
如果是普通 Maven 项目,需要手动添加。
jar org.springframework.boot spring-boot-starter-parent 2.3.3.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.projectlombok lombok provided
添加启动类
如果是普通 Maven 项目,需要手动添加。
@SpringBootApplication
public class xxxApplication {
public static void main(String[] args) {
SpringApplication.run(xxxApplication.class, args);
}
}拷贝项目代码
把 src\main\java 中的 java 代码全部拷贝到新项目中的 src\main\java 里面。
把 src\main\resources 中存放 mapper.xml 的目录也拷贝到新项目中的 src\main\resources 里面。
下面步骤用什么拷贝什么
配置数据库连接池
添加依赖
mysql mysql-connector-java runtime
还需要jdbc依赖(事务)
连接池的自动配置方式
application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///数据库库名?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=admin
此时运行测试获取的数据库连接池对象可以执行成功,并且我们看到了使用的连接池是 Hikari,全称是 Hikaricp。
其实,在 Spring Boot 2.0 之后,采用的默认连接池就是 Hikari,号称“史上最快的连接池”,所以我们没有添加依赖也能直接用,Spring Boot 的自动配置中含有 DataSourceAutoConfiguration 配置类,会先检查容器中是否已经有连接池对象,没有则会使用默认的连接池,并根据特定的属性来自动配置连接池对象,用到的属性值来源于DataSourceProperties 对象。
配置 Druid 连接池
当然如果我们在项目中还是想要使用 Druid 作为连接池也是可以的。只需要添加依赖即可,此时加的是 Druid 的 druid-spring-boot-starter 自动配置包, 里面包含了 DruidDataSourceAutoConfigure 自动配置类,会自动创建 Druid 的连接池对象,所以 Spring Boot 发现已经有连接池对象了,则不会再使用 Hikari。
com.alibaba druid-spring-boot-starter 1.1.21
注意:如果添加的依赖是以前那种普通包,只有 Druid 自身的依赖,并不是自动配置包,则需要进行以下配置:
com.alibaba druid 1.1.19
在配置文件中添加参数
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
所以一般如果已经提供了 Spring Boot 相关的自动配置包,直接使用自动配置的会更方便些。
对于 Hikari 以及 Druid 两款都是开源产品,阿里的 Druid 有中文的开源社区,交流起来更加方便,并且经过阿里多个系统的实验,也是非常的稳定,而 Hikari 是 Spring Boot 2.0 默认的连接池,全世界使用范围也非常广,对于大部分业务来说,使用哪一款都是差不多的,毕竟性能瓶颈一般都不在连接池。
集成 MyBatis
添加依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1
配置 Mapper 对象
扫描 Mapper 接口只要在任意配置类上贴个注解 @MapperScan 并指定扫描的包路径即可。
@SpringBootApplication
@MapperScan("cn.xxx.mapper")
public class SsmApplication {
public static void main(String[] args) {
SpringApplication.run(SsmApplication.class, args);
}
}MyBatis配置属性
在 application.properties 配置以前在 XML 配置了的那些 MyBatis 的属性,属性前缀 mybatis。
# 配置别名 mybatis.type-aliases-package=cn.xxx.domain # 打印 SQL 日志 logging.level.cn.xxx.mapper=trace
事务管理
添加依赖
org.springframework.boot spring-boot-starter-jdbc
注解方式
直接在业务层实现类上或者其方法上直接贴 @Transactional 注解即可。
Spring Boot 自动配置中提供了 TransactionAutoConfiguration 事务注解自动配置类,引入了事务的依赖后,可直接使用 @Transactional 注解。
配置切换代理
Spring Boot 默认优先选择 CGLIB 代理,如果需要改为优先使用 JDK 代理,需要做以下配置:
spring.aop.proxy-target-class=false
测试验证
在测试类上添加方法,打印业务对象看下其真实类型。
@Test
public void testSave() {
System.out.println(departmentService.getClass());
}集成 Web
添加依赖
org.springframework.boot spring-boot-starter-web
修改端口
在 application.properties 配置,如下:
server.port=80
目录结构
拷贝静态资源及模板文件

静态资源的一些处理
默认情况下,Spring Boot 会从 classpath 下的 /static,/public,/resources,/META-INF/resources 下加载静态资源。
可以在 application.properties 中配置 spring.resources.staticLocations 属性来修改静态资源的默认加载地址。
因为应用是打成 jar 包,所以之前的 src/main/webapp 就作废了,如果有文件上传,那么就的必须去配置图片保存的路径,因为图片不能存在jar包中,之前war包方式才可以。
# 告诉 Spring Boot 必须要以怎样的路径开头才能访问到静态资源,这样做是为了后期如果需要拦截,拦截器可以统一排除掉这些以这个开头的访问 spring.mvc.static-path-pattern=/static/**
前端控制器映射路径配置
在 Spring Boot 自动配置中,WebMvcAutoConfiguration 自动配置类导入了 DispatcherServletAutoConfiguration 配置对象,会自动创建 DispatcherServlet 前端控制器,默认的映射路径是 /,Spring Boot 多数用于前后端分离和微服务开发,默认支持 RESTFul 风格,所以一般都是使用默认的即可,不做改动。
# 在匹配模式时是否使用后缀模式匹配(严格匹配后缀)一般前后端分离做严格区分时配置 spring.mvc.pathmatch.use-suffix-pattern=true
集成 Thymeleaf
添加依赖
org.springframework.boot spring-boot-starter-thymeleaf
相关配置
# Thymelea 模板配置 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML spring.thymeleaf.encoding=UTF-8 # 上面几个配置都是默认值不需要配置 # 热部署文件,页面不产生缓存,及时更新(开发时禁用缓存) spring.thymeleaf.cache=false
修改模板文件
使用 Thymeleaf 的语法替换之前 JSP 中的 EL 表达式和 JSTL。
统一异常处理
框架自带方式
Spring Boot 默认情况下,会把所有错误都交给 BasicErrorController 类完成处理,错误的视图我们放到 classpath:/static/error/ 和 classpath:/templates/error/ 路径上,HTTP 错误状态码就是默认视图的名称。如:
出现 404 错误 -> classpath:/static/error/404.html
出现 5xx 错误 -> classpath:/static/error/5xx.html (因为 5xx 错误是后台错误, 原因很多种, 有时有需求需要根据原因不一样响应不同的内容, 甚至响应数据格式都不一样,所以我们一般都用统一异常处理,然后再根据错误原因把对应内容放到页面上)
控制器增强器方式
自己定义一个控制器增强器,专门用于统一异常处理,该方式一般用于处理 5xx 类错误。
@ControllerAdvice
// 控制器消息,这个注解为了spring帮我们创建对象
public class ExceptionControllerAdvice {
@ExceptionHandler(RuntimeException.class) // 处理什么类型的异常
//返回值形式也可以自定义,可以返回modelAndView,
public String handlException(RuntimeException e, Model model,HandlerMethod m) {
//HandlerMethod这个对象存放了spring对控制器的方法和控制器对象
//将错误信息存入到model中
e.printStackTrace(); // 记得这行代码保留,不然项目后台出异常,开发工具控制台看不到错误信息
return "errorView"; // 指定错误页面视图名称,然后在页面从model对象中拿到错误信息
}
}添加注册多个拦截器
定义一个配置类,实现 WebMvcConfigurer 接口,在 addInterceptors 方法注册拦截器。
@Configuration
public class MvcJavaConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
//拦截器类实现HandlerInterceptor
@Autowired
private PermissionInterceptor permissionInterceptor;
//拦截器类实现HandlerInterceptor
public void addInterceptors(InterceptorRegistry registry) {
// 注册登录拦截器
registry.addInterceptor(loginInterceptor)
// 对哪些资源起过滤作用
.addPathPatterns("/**")
// 对哪些资源起排除作用
.excludePathPatterns("/login", "/static/**");//多个路径
//多个拦截器
// 注册权限拦截器
registry.addInterceptor(permissionInterceptor)
// 对哪些资源起过滤作用
.addPathPatterns("/**")
// 对哪些资源起排除作用
.excludePathPatterns("/login", "/static/**");
}
}系统日志
为什么要用日志
比起 System.out.println,日志框架更为灵活,可以把日志的输出和代码分离。
日志框架可以方便的定义日志的输出环境,控制台,文件,数据库。
日志框架可以方便的定义日志的输出格式和输出级别。
Spring Boot 中的日志介绍
Spring Boot 默认已经开启日志,其默认的日志格式为:时间 日志级别 线程ID 线程名称 日志类 日志说明。
Spring Boot 的日志分为:系统日志和应用日志。
日志级别,级别越高,输出的内容越少,如果设置的级别为 info,则 debug 以及 trace 级别的都无法显示,日志级别由低到高 trace < debug < info < warn < error。
Spring Boot 默认选择 Logback 作为日志框架,也能选择其他日志框架,但是没有必要。

由于slf4j是后来出现的日志标准,目的是统一之前很多日志框架的使用方式,对主流的日志框架主动的实现了这个标准,实际就是调用各日志框架的api
输出日志
在我们自定义的类中可以使用日志框架来输出。
方式一
在类中注入一个静态 Logger 对象,传入当前类的作用是方便输出日志时可以清晰地看到该日志信息是属于哪个类的。
private static final Logger log = LoggerFactory.getLogger(当前类.class);
方式二
使用 Lombok 提供的 @Slf4j 注解来简化代码,其实和方式一的作用是一样的。
@Slf4j
@Service
public class PermissionServiceImpl implements IPermissionService {}在需要输出日志的地方使用日志的输出方法
log.info(...);
log.error(...);
...
// 输出日志中有变量可以使用 {} 作为占位符
log.info("删除id为{}的数据", id);日志级别
日志级别由低到高 trace < debug < info < warn < error。
log.debug("权限插入成功:{}",expression);
log.info("权限插入成功:{}",expression);
log.warn("权限插入成功:{}",expression);执行权限加载功能后,发现控制台出现 info 与 warn 的信息,debug 的没有显示,原因是因为 Spring Boot 默认的日志级别是 info,所以 debug 低于 info 级别,就不会显示出来了。

若要修改日志显示级别,最快速的方式是在 application.properties 配置,配置如下
# 把日志级别修改为 debug,不过我们一般不会更改,除非要调试找 bug,不然控制台显示的内容太多也容易乱,下面为全局配置,单路径配置如打印 SQL 日志 logging.level.cn.xxx.mapper=trace logging.level.root=debug
Logback 配置文件,日志存入文件中
Logback 框架默认会自动加载 classpath:logback.xml,作为框架的配置文件,在 Spring Boot项目中使用时,还会额外的支持自动加载classpath:logback-spring.xml,在 Spring Boot 项目中推荐使用 logback-spring.xml,功能更强大些。
${appName} %d{yyyy-MM-dd-HH:mm:ss} %level [%thread]-%logger{35} >> %msg %n %-4relative [%thread] %level %logger{35} - %msg %n true MyLog.log
参考日志格式:
%d{yyyy-MM-dd-HH:mm:ss} %level [%thread]-%class:%line >> %msg %n
格式中的标识符组成:
%logger{n}:输出 Logger 对象类名,n 代表长度
%class{n}:输出所在类名
%d{pattern} 或者 date{pattern}:输出日志日期,格式同 Java
%L/line:日志所在行号
%m/msg:日志内容
%method:所在方法名称
%p/level:日志级别
%thread:所在线程名称
一般开发过程,日志记录到控制台
实际上线了, 日志一般记录到文件中
其他功能
修改spring boot启动打印画面
Spring Boot 提供了一些扩展点,比如修改 banner:在 resources 根目录中放入 banner.txt 文件,替换默认的启动spring打印的字样。
# application.properties # 关闭 banner spring.main.banner-mode=off
热部署插件
除了使用 JRebel 插件(收费)来实现热部署,还可以使用 Spring Boot 提供的 spring-boot-devtools 包来完成 Springboot 应用热部署,从而实现更改方法内代码和模板文件不需要重启,只需要点击编译即可。
org.springframework.boot spring-boot-devtools
Spring Boot 重启是 reload 重启,通过监控 classpath 的变化,如果 classpath 中的文件发生变化,即触发重启。Spring Boot 通过两个 classpath 来完成 reload,一个 basic classloader 中加载不变的类(jar 包中的类),一个 restart classloader 中加载 classpath 中的类(自己写的类),重启的时候,restart classloader 中的类丢弃并重新加载。
下面是相关的一些配置,一般不用配置
# 默认排除不需要更新的资源 spring.devtools.restart.exclude=static/**,templates/**,public/** # 增加额外的排除资源 # 处理默认配置排除之外的 spring.devtools.restart.additional-exclude=public/** # 禁用自动重启 spring.devtools.restart.enabled=false
切换运行环境
在实际开发中,一个系统是有多套运行环境的,如开发时有开发的环境,测试时有测试的环境,不同的环境中,系统的参数设置是不同的,如:连接开发数据和测试数据库的 URL 绝对是不同的,那么怎么快速的切换系统运行的环境呢?我们需要为不同的环境创建不同的配置文件,如下:
# application-dev.properties server.port=8081
# application-test.properties server.port=8082
最后我们在 application.properties 中指定需要使用的环境即可
# 在 application.properties 中指定需要使用的环境即可 spring.profiles.active=dev
在命令行模式下启动也可以激活: java -jar xxx --spring.profiles.active=dev
今天关于《ssm改造spring boot项目的方法是什么》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
如何挽救与Gorm的一对一关系?
- 上一篇
- 如何挽救与Gorm的一对一关系?
- 下一篇
- win7使用帮助和支持的操作步骤
-
- 文章 · java教程 | 3天前 | map · 并发安全 · 缓存设计 · Java教程 · java optional concurrenthashmap computeIfAbsent Map缓存
- Java computeIfAbsent 缓存初始化实战:少写判断、避开空值和并发坑
- 236浏览 收藏
-
- 文章 · java教程 | 4天前 | Java · 异步编程 · 后端开发 · CompletableFuture · 接口聚合 · java 结果合并 completablefuture 并行调用 超时兜底
- Java CompletableFuture 多接口聚合完整流程:并行调用、超时兜底和结果合并
- 428浏览 收藏
-
- 文章 · java教程 | 4天前 | Java · 线程安全 · DateTimeFormatter · 日期处理 · 并发问题 · java 线程安全 日期格式化 threadlocal SimpleDateFormat DateTimeFormatter
- Java SimpleDateFormat 日期偶发错乱怎么办:从共享实例到线程安全一步步排查
- 481浏览 收藏
-
- 文章 · java教程 | 6天前 | http接口 · httpclient · Java教程 · 接口调试 · 超时处理 · java 接口调用 httpclient 超时控制 状态码 响应体
- Java HttpClient 调接口实战:超时、状态码和响应体这样处理
- 224浏览 收藏
-
- 文章 · java教程 | 6天前 | 时间处理 · instant · Java教程 · 时区转换 · DateTimeFormatter · java DateTimeFormatter java.time 时区处理 ZoneId INSTANT
- Java 时间与时区处理实战:Instant、ZoneId 和 DateTimeFormatter 怎么配
- 461浏览 收藏
-
- 文章 · java教程 | 6天前 | Java · Stream · 集合统计 · 分组聚合 · Collectors · java Stream Collectors groupingBy counting summarizingInt
- Java Stream 分组统计实战:groupingBy、counting 和 summarizingInt 怎么用
- 478浏览 收藏
-
- 文章 · java教程 | 6天前 | Java · 文件读取 · 异常处理 · 资源管理 · try-with-resources · java 异常处理 try-with-resources 资源关闭 AutoCloseable 文件流
- Java try-with-resources 资源关闭实战:文件流和目录扫描这样写更稳
- 268浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 1001次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 958次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 895次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 1083次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 1066次使用
-
- 提升Java功能开发效率的有力工具:微服务架构
- 2023-10-06 501浏览
-
- 掌握Java海康SDK二次开发的必备技巧
- 2023-10-01 501浏览
-
- 如何使用java实现桶排序算法
- 2023-10-03 501浏览
-
- Java开发实战经验:如何优化开发逻辑
- 2023-10-31 501浏览
-
- 如何使用Java中的Math.max()方法比较两个数的大小?
- 2023-11-18 501浏览

