>Java >java지도 시간 >ssm이 스프링 부트 프로젝트를 변환하는 방법은 무엇입니까?

ssm이 스프링 부트 프로젝트를 변환하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-05-16 08:28:05664검색

종속성 추가

일반 Maven 프로젝트라면 수동으로 추가해야 합니다.

<!-- 打包方式 jar 包 -->
<packaging>jar</packaging>

<!-- 指定父工程 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.3.RELEASE</version>
</parent>

<dependencies>
    <!-- spring boot Web 包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- spring boot Test 包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

시작 클래스 추가

일반 Maven 프로젝트인 경우 수동으로 추가해야 합니다.

@SpringBootApplication
public class xxxApplication {
    public static void main(String[] args) {
        SpringApplication.run(xxxApplication.class, args);
    }
}

프로젝트 코드 복사

  • srcmainjava에 있는 모든 Java 코드를 새 프로젝트의 srcmainjava에 복사하세요.

  • srcmainresources에 mapper.xml이 저장된 디렉터리를 새 프로젝트의 srcmainresources에 복사하세요.

다음 단계에서 복사할 내용

데이터베이스 연결 풀 구성

종속성 추가

<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

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 자동 구성 패키지입니다. 여기에는 Druid 연결 풀 개체를 자동으로 생성하는 DruidDataSourceAutoConfigure 자동 구성 클래스가 포함되어 있으므로 Spring은 Boot에서 이미 존재하는 것으로 확인됩니다. 연결 풀 개체가 제거되면 Hikari가 더 이상 사용되지 않습니다.

<!-- druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.21</version>
</dependency>

참고: 추가된 종속성이 이전 일반 패키지이고 Druid 자체에만 의존하고 자동 구성 패키지가 아닌 경우 다음을 구성해야 합니다.

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.19</version>
</dependency>

구성 파일에 매개변수 추가

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

따라서 일반적으로 Spring Boot 관련 자동 구성 패키지가 제공되어 있다면 자동 구성을 직접 사용하는 것이 더 편리할 것입니다.

HikariDruid 모두 오픈 소스 제품입니다. Alibaba의 Druid는 중국 오픈 소스 커뮤니티를 보유하고 있어 여러 Alibaba 시스템을 실험한 결과 매우 안정적이며 Hikari는 Spring입니다. Boot. 2.0 기본 연결 풀은 전 세계적으로 널리 사용됩니다. 대부분의 기업에서는 어떤 것을 사용하든 거의 동일합니다. 결국 성능 병목 현상은 연결 풀에서 발생하지 않습니다.

MyBatis 통합

종속성 추가

<!-- Mybatis 集成到 SpringBoot 中的依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>

매퍼 객체 구성

매퍼 인터페이스 스캔모든 구성 클래스@MapperScan 주석을 게시하고 스캔할 패키지 경로를 지정하기만 하면 됩니다.

@SpringBootApplication
@MapperScan("cn.xxx.mapper")
public class SsmApplication {
    public static void main(String[] args) {
        SpringApplication.run(SsmApplication.class, args);
    }
}
@MapperScan 并指定扫描的包路径即可。

# 配置别名
mybatis.type-aliases-package=cn.xxx.domain

# 打印 SQL 日志
logging.level.cn.xxx.mapper=trace

MyBatis配置属性

在 application.properties 配置以前在 XML 配置了的那些 MyBatis 的属性,属性前缀 mybatis。

<!-- Spring JDBC 和 TX -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

事务管理

添加依赖

spring.aop.proxy-target-class=false

注解方式

直接在业务层实现类上或者其方法上直接贴 @Transactional 注解即可。

Spring Boot 自动配置中提供了 TransactionAutoConfiguration 事务注解自动配置类,引入了事务的依赖后,可直接使用 @TransactionalMyBatis 구성 속성

이전에 application.properties에서 XML로 구성된 MyBatis 속성을 속성 접두어 mybatis를 사용하여 구성합니다.

@Test
public void testSave() {
    System.out.println(departmentService.getClass());
}

트랜잭션 관리

종속성 추가

<!-- spring boot web 启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

주석 메서드

@Transactional 주석을

비즈니스 계층 구현 클래스 또는 해당 메서드

에 직접 붙여넣습니다.

Spring Boot 자동 구성은 TransactionAutoConfiguration 트랜잭션 주석 자동 구성 클래스를 제공합니다. 트랜잭션 종속성을 도입한 후 @Transactional 주석을 직접 사용할 수 있습니다.

전환 에이전트 구성

Spring Boot는 기본적으로 CGLIB 에이전트에 우선 순위를 부여합니다. JDK 에이전트를 먼저 사용하도록 변경해야 하는 경우 다음 구성을 수행해야 합니다.

server.port=80

테스트 검증

테스트 클래스에 메서드를 추가합니다. , 비즈니스 객체를 인쇄하여 현실 유형을 확인하세요. ssm이 스프링 부트 프로젝트를 변환하는 방법은 무엇입니까?

# 告诉 Spring Boot 必须要以怎样的路径开头才能访问到静态资源,这样做是为了后期如果需要拦截,拦截器可以统一排除掉这些以这个开头的访问
spring.mvc.static-path-pattern=/static/**

웹 통합

종속성 추가
    # 在匹配模式时是否使用后缀模式匹配(严格匹配后缀)一般前后端分离做严格区分时配置
    spring.mvc.pathmatch.use-suffix-pattern=true
  • 포트 수정

    application.properties에서 다음과 같이 구성하세요.
  • <!-- 引入 Thymeleaf 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
  • 디렉터리 구조

    정적 리소스 및 템플릿 파일 복사
  • 정적 리소스의 일부 처리

기본적으로 Spring Boot는 클래스 경로 아래의 /static, /public, /resources, /META-INF/resources에서 정적 리소스를 로드합니다.

🎜🎜🎜application.properties에서 spring.resources.staticLocations 속성을 구성하여 정적 리소스의 기본 로딩 주소를 수정할 수 있습니다. 🎜🎜🎜🎜애플리케이션이 jar 패키지로 패키징되어 있기 때문에 기존 src/main/webapp은 유효하지 않습니다. 업로드할 파일이 있는 경우에는 이미지를 저장할 수 없으므로 이미지를 저장할 경로를 구성해야 합니다. jar 패키지. 이전 war 패키지 방식만 사용할 수 있습니다. 🎜🎜🎜
# Thymelea 模板配置
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html 
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
# 上面几个配置都是默认值不需要配置

# 热部署文件,页面不产生缓存,及时更新(开发时禁用缓存)
spring.thymeleaf.cache=false
🎜프런트 엔드 컨트롤러 매핑 경로 구성🎜🎜Spring Boot 자동 구성에서 WebMvcAutoConfiguration 자동 구성 클래스는 DispatcherServlet 프런트 엔드 컨트롤러를 자동으로 생성하는 DispatcherServletAutoConfiguration 구성 개체를 가져옵니다. 기본 매핑 경로는 /입니다. Spring Boot에서 주로 사용됩니다. 프런트엔드와 백엔드 분리 및 마이크로서비스 개발의 경우 RESTFul 스타일이 기본으로 지원되므로 일반적으로 별다른 변경 없이 기본값을 사용할 수 있습니다. 🎜
# 在匹配模式时是否使用后缀模式匹配(严格匹配后缀)一般前后端分离做严格区分时配置
spring.mvc.pathmatch.use-suffix-pattern=true

集成 Thymeleaf

添加依赖

<!-- 引入 Thymeleaf 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

相关配置

# 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

  • Spring Boot 默认选择 Logback 作为日志框架,也能选择其他日志框架,但是没有必要。

ssm이 스프링 부트 프로젝트를 변환하는 방법은 무엇입니까?

由于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

log.debug("权限插入成功:{}",expression);
log.info("权限插入成功:{}",expression);
log.warn("权限插入成功:{}",expression);

执行权限加载功能后,发现控制台出现 info 与 warn 的信息,debug 的没有显示,原因是因为 Spring Boot 默认的日志级别是 info,所以 debug 低于 info 级别,就不会显示出来了。

ssm이 스프링 부트 프로젝트를 변환하는 방법은 무엇입니까?

若要修改日志显示级别,最快速的方式是在 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,功能更强大些。

<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan:开启日志框架的热部署,默认值 true 表示开启
    scanPeriod:热部署的频率,默认值 60 second
    debug:设置输出框架内部的日志,默认值 false
-->
<configuration scan="true" scanPeriod="60 second" debug="false">
    <property name="appName" value="springboot demo" />
    <contextName>${appName}</contextName>
    
    <!-- appender:日志输出对象,配置不同的类拥有不同的功能
        ch.qos.logback.core.ConsoleAppender:日志输出到控制台        
    -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd-HH:mm:ss} %level [%thread]-%logger{35} >> %msg %n</pattern>
     </encoder>
   </appender>
    
    <!-- ch.qos.logback.core.FileAppender:日志输出到文件中-->
    <appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
        <encoder>
            <pattern>%-4relative [%thread] %level %logger{35} - %msg %n</pattern>
       </encoder>
        <append>true</append> <!-- 是否为在原有文件追加内容方式-->
        <file>MyLog.log</file> <!-- 日志存放的文件,也可以指定路径 -->
   </appender>
    
    
    <!-- 
        root 是项目通用的 logger,一般情况下都是使用 root 配置的日志输出
        level:按照级别输出日志,日志级别,级别越高,输出的内容越少
    -->
   <root level="info">
        <appender-ref ref="STDOUT" /> <!-- 日志输出到控制台还是存入文件中 -->
    </root>
    
    <!-- 自定义的 logger,用于专门输出特定包中打印的日志
    <logger name="cn.xxx.crm.mapper" level="trace">
    </logger>
	-->
</configuration>

参考日志格式:

  • %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 应用热部署,从而实现更改方法内代码和模板文件不需要重启,只需要点击编译即可。

<!-- Spring Boot 热部署插件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

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이 스프링 부트 프로젝트를 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제