当前位置:

首页 > 编程开发 > ssm改造spring boot项目的方法是什么

ssm改造spring boot项目的方法是什么

添加依赖如果是普通Maven项目,需要手动添加。jarorg.springframework.bootspring-boot-starter-parent2.3.3.RELEASEorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.projectlomboklombokprovided添加启动类如果是普通Maven项目,需要手动添加。@SpringBoo

本文目录

    添加依赖

    如果是普通 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

    目录结构

    拷贝静态资源及模板文件

    ssm改造spring boot项目的方法是什么

    静态资源的一些处理

    • 默认情况下,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 作为日志框架,也能选择其他日志框架,但是没有必要。

    ssm改造spring boot项目的方法是什么

    由于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 级别,就不会显示出来了。

    ssm改造spring boot项目的方法是什么

    若要修改日志显示级别,最快速的方式是在 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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    解析SpringBoot和SpringMVC之间的异同
    解析SpringBoot和SpringMVC之间的异同

    解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

    探索SpringCloud和SpringBoot在微服务领域的不同应用方式
    探索SpringCloud和SpringBoot在微服务领域的不同应用方式

    近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

    SpringBoot和SpringMVC有何区别?
    SpringBoot和SpringMVC有何区别?

    SpringBoot与SpringMVC的不同之处在哪里?SpringBoot和SpringMVC是两个非常流行的Java开发框架,用于构建Web应用程序。尽管它们经常分别被使用,但它们之间的不同之处也是很明显的。首先,SpringBoot可以被看作是一个Spring框架的扩展或者增强版。它旨在简化Spring应用程序的初始化和配置过程,以帮助开发人

    比较SpringBoot和SpringMVC的异同
    比较SpringBoot和SpringMVC的异同

    SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

    SpringBoot与SpringMVC的不同点是什么?
    SpringBoot与SpringMVC的不同点是什么?

    SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。一、SpringBoot的特点:简化配置:SpringBoot通过约定优于配置的原则,大大简化了项目的配置过程。它可以自动配置项目所需要的参数,开发人

    比较和选择指南:SpringCloud与SpringBoot的功能比较
    比较和选择指南:SpringCloud与SpringBoot的功能比较

    SpringCloud和SpringBoot是目前Java领域中最热门的开源框架,它们分别提供了一套完善的微服务架构和快速构建应用程序的解决方案。本文将对它们的功能进行比较,并给出选择指南,以帮助读者了解它们的优势和适用场景。SpringBoot是一个用于开发Java应用程序的框架,它提供了一个简化的开发流程,集成了大量常用的功能和组件,减少了开发者的工作量

    SpringCloud与SpringBoot:分析它们之间的相似与不同
    SpringCloud与SpringBoot:分析它们之间的相似与不同

    深入剖析SpringCloud和SpringBoot的异同引言:在构建企业级应用程序时,Spring框架已经成为开发者们的首选。它提供了一种简单而强大的方式来构建独立于平台的应用程序。Spring框架由两个核心模块组成:SpringBoot和SpringCloud。虽然它们都可以帮助开发者快速搭建应用程序,但它们的目标和用途存在一些差异。本文将深入剖析Spr

    从架构角度看SpringCloud与SpringBoot的差异
    从架构角度看SpringCloud与SpringBoot的差异

    从架构角度看SpringCloud与SpringBoot的差异引言:在当今的互联网时代,构建分布式系统已经成为了一种必要的需求。而SpringBoot和SpringCloud正是为了满足这个需求而诞生的。尽管它们都是由Spring框架所提供的解决方案,但从架构角度来看,它们存在着一些重要的差异。本文将从架构的角度出发,对SpringBoot和SpringCl

    Java API 开发中使用 SpringBoot 的利弊分析
    Java API 开发中使用 SpringBoot 的利弊分析

    JavaAPI开发中使用SpringBoot的利弊分析随着互联网的快速发展和技术的不断更新迭代,Java技术在开发中的广泛应用引起了人们的重视。而SpringBoot作为一种微服务架构的解决方案,已经逐渐成为Java开发中的热门选择。那么,在JavaAPI开发中使用SpringBoot,到底有哪些利弊呢?下面来分析一下。利:简化开发

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。