Spring boot开发总结二(功能应用)

本文全面解析SpringBoot的热部署、数据库整合、消息队列、定时任务等核心功能,涵盖mybatis、jpa、rabbitMq、日志配置、单元测试及模板引擎的详细配置与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0. 基础篇

1. 热部署

2. Spring Boot整合mybatis与mysql

3. Spring Boot整合jpa

4. Spring boot简单整合rabbitMq

5.  Spring boot的过滤器的使用

6.Spring boot的监听器的使用

7.Spring boot的拦截器使用

8. Spring boot的定时任务

9. Spring boot发送mail

10. Spring boot日志配置

 ( 1)log4j

 ( 2)logging

11.Spring boot单元测试

12. 其他应用篇


1. 热部署

(1)添加POM依赖

    <dependency> 
        <groupId>org.spingframework.boot</groupId> 
        <artifactId>spring-boot-drevtools</artifactId> 
        <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
    </dependency>

 

2. Spring Boot整合mybatis与mysql

(1)添加pom依赖

<!-- mybatis -->
     <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>1.1.1</version> 
    </dependency>
<!-- mysql --> 
    <dependency>
         <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>5.1.21</version> 
    </dependency>

(2)修改配置文件

spring.datasource.url=jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

(3)启动类上加注解

@MapperScan("com.winter.mapper")//将项目中对应的mapper类的路径加进来就可以了

3. Spring Boot整合jpa

(1)引入POM依赖:

<!--引入MySQL的依赖关系-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
<!--引入JPA的依赖关系-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

(2)修改配置文件,添加JPA配置。

spring.jpa.database=mysql
spring.jpa.show-sql=true

(3)创建JPA接口类

新建接口,并且继承SpringDataJPA内的接口作为父类,JpaRepository接口(SpringDataJPA提供的简单数据操作接口),JpaSpecificationExecutor(SpringDataJPA提供的复杂查询接口),序列化(序列化接口)。

(4)创建实体类

类上加注解:

@Entity
@Table(name="表名")

主键ID上加注解:

@Id
@GeneratedValue
@Column(name = "列名")

其他字段上加注解:

@Column(name = "列名")

4. Spring boot简单整合rabbitMq

(1)添加POM依赖:

<!-- 添加springboot对amqp的支持 --> 
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

(2)修改配置文件,添加的RabbitMQ配置。

spring.rabbitmq.host=127.0.0.1 
spring.rabbitmq.port=5672 
spring.rabbitmq.username=guest 
spring.rabbitmq.password=guest

(3)配置队列(消息队列)。采用的是直接模式,需要在配置队列的时候,指定一个键,使其和交换机绑定。

    @Configuration
    public class SenderConf {
    @Bean
    public Queue queue() {
        return new Queue("queue");
        }
    }

(4)使用AmqpTemplate去发送消息:

//类中自动导入AmqpTemplate
@Autowired private AmqpTemplate template;

//方法里发送消息
template.convertAndSend("queue","消息,可以为字符串,也可以为对象");

(5)监听消息,消费消息

//方法上加注解,消息通过方法参数获得
@RabbitListener(queues="queue")

5.  Spring boot的过滤器的使用

(1) 方法一:注解配置

package com.example.demo.filter;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
 * 过滤器
 */
@Component
@WebFilter(urlPatterns = "/*")
@Order(value = 1)
public class DemoFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException { }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
       //过滤业务处理
        //放行
        chain.doFilter(servletRequest, servletResponse);
    }
    @Override
    public void destroy() { }
}

(2) 方法二:bean配置

        1)编写过滤器

package com.example.demo.filter;

import org.springframework.stereotype.Component;
import javax.servlet.*;
import java.io.IOException;
/**
 * 过滤器
 */
@Component
public class SessionFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException { }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        //业务代码,放行
        chain.doFilter(servletRequest, servletResponse);

    }
    @Override
    public void destroy() { }
}

2)编写配置类

package com.example.demo.filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfiguration {
    @Bean
    public FilterRegistrationBean filterDemo4Registration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        //注入过滤器
        registration.setFilter(new SessionFilter());
        //拦截规则
        registration.addUrlPatterns("/**");
        //过滤器名称
        registration.setName("SessionFilter");
        //是否自动注册 false 取消Filter的自动注册
        registration.setEnabled(false);
        //过滤器顺序
        registration.setOrder(0);
        return registration;
    }
}

注:两种方法的过滤器可同时用,但方法一的过滤器比方法二的先执行,两种过滤器的顺序配置只对各自有用.

6.Spring boot的监听器的使用

(1)servlet上下文监听器 

        1)启动类上加注解

@ServletComponentScan

        2)编写监听器

package com.example.demo;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
         //项目启动前预处理业务   
        System.out.println("项目启动中");
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("项目销毁中");
    }
}

(2)session监听器

        1)启动类上加注解

@ServletComponentScan

         2)编写监听器

package com.example.demo;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("创建session");
       
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("销毁session");
    }
}

7.Spring boot的拦截器使用

  (1)编写拦截器

package com.example.demo.filter;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet
public class ActionInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    //在请求处理之前进行调用(Controller方法调用之前),返回true放行
    //配置两个拦截器,先配的先执行
    return true;
  }
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    //请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
     //配置两个拦截器,先配的后执行
  }
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
     //在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要是用于进行资源清理工作)
     //配置两个拦截器,先配的后执行
  }
}

   (2)编写配置类

package com.example.demo.filter;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Component
public class ApplicationConfig extends WebMvcConfigurerAdapter {
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 多个拦截器组成一个拦截器链,可添加多个拦截器,顺序为添加顺序
    // addPathPatterns 用于添加拦截规则
    // excludePathPatterns 用户排除拦截,放行url
    registry.addInterceptor(new ActionInterceptor1()).addPathPatterns("/*");
    registry.addInterceptor(new ActionInterceptor2()).addPathPatterns("/*");
    super.addInterceptors(registry);
  }
}

 8. Spring boot的定时任务

(1)启动类上加注解

@EnableScheduling

(2)定义定时任务

@Component
public class Jobs {
    @Scheduled(fixedDelay=1000)
    public void fixedDelayJob(){
        System.out.println(new Date());
    }
}

(3)注解Scheduled属性详解

  1. cron  参数接收一个cron表达式,字符串,点击查看

  2. zone  时区,默认"",为该服务器所在时区

  3. fixedDelay  上一次执行完毕时间点之后多长时间再执行,数字

  4. fixedDelayString  与fixedDelay相同,字符串,支持占位符

    //配置文件中有配置:time.fixedDelay=5000
    @Scheduled(fixedDelayString = "${time.fixedDelay}")
  5. fixedRate  上一次开始执行时间点之后多长时间再执行,数字

  6. fixedRateString  与fixedRate相同,字符串,支持占位符

  7. initialDelay  第一次延迟多长时间后再执行,数字

  8. initialDelayString  与initialDelay相同,字符串,支持占位符

9. Spring boot发送mail

(1)pom文件配置

<dependency>  
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

(2)文件配置

spring.mail.host=smtp.qq.com  
spring.mail.username=用户名  //发送方的邮箱
spring.mail.password=密码  //对于qq邮箱而言 密码指的就是发送方的授权码
spring.mail.properties.mail.smtp.auth=true  
spring.mail.properties.mail.smtp.starttls.enable=true  
spring.mail.properties.mail.smtp.starttls.required=true  

(3)代码应用


    @Autowired
    private JavaMailSender mailSender;
    //发送简单邮件
    public void sendSimpleMail() throws Exception {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("dyc87112@qq.com");
        message.setTo("dyc87112@qq.com");
        message.setSubject("主题:简单邮件");
        message.setText("测试邮件内容");
        mailSender.send(message);
    }
    //发送html邮件
    public void sendHtml() throws Exception{
        MimeMessage message = null;
        message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom("dyc87112@qq.com");
        helper.setTo("398986099@qq.com");
        helper.setSubject("标题:发送Html内容");
        String sb="<html></html>";
        helper.setText(sb, true);
        mailSender.send(message);
    }
    //发送附件
     public void sendAttachmentsMail() { 
            MimeMessage message=mailSender.createMimeMessage();
            MimeMessageHelper helper=new MimeMessageHelper(message,true);
            helper.setFrom("dyc87112@qq.com");
            helper.setTo("dyc87112@qq.com");
            helper.setSubject("标题");
            helper.setText("内容");
            String filePath=""D:/a.mp3"";
            FileSystemResource file=new FileSystemResource(new File(filePath));
            String fileName=filePath.substring(filePath.lastIndexOf(File.separator));
              //添加多个附件可以使用多个addAttachment方法
            helper.addAttachment(fileName,file);
            mailSender.send(message);
        } 

10. Spring boot日志配置

(1)logging


#设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
logging.path=D:/a
#会在项目的当前路径下生成一个 xxx.log 日志文件。
logging.file=springbootdemo.log
#注:二者不能同时使用,如若同时使用,则只有logging.file生效
#设置root日志级别
logging.level.root=INFO
##设置com.zp包下日志级别
logging.level.com.zp=WARN
#限制日志文件大小
logging.file.max-size=1KB
#保留的归档日志文件的最大数量
logging.file.max-history=4
#控制台日志打印格式
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
#文件日志打印格式
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n

(2)log4j

        1)写个pom文件

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>

         2)添加 log4j.properties 配置文件

log4j.rootLogger=INFO,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss}  %c %m %n

 log4j.properties 配置文件其他配置 点击查看

        3)application.properties配置文件进入配置

logging.config=src/main/resources/log4j.properties

        4)日志的使用

//引入logger
private static Logger logger = Logger.getLogger(MyClassName.class);
//方法里调用info,error,debug,warn,fatal方法
logger.info("info");

11.Spring boot整合模板引擎

    11.1 Thymeleaf

引入pom坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

 配置文件配置:

#指定模板所在的目录
spring.thymeleaf.prefix= classpath:/templates/
#检查模板路径是否存在
spring.thymeleaf.check-template-location= true
#是否缓存,开发模式下设置为false,避免改了模板还要重启服务器,线上设置为true,可以提高性能。
spring.thymeleaf.cache= false
spring.thymeleaf.suffix= .html
#与Servlet中设置输出对应属性效果一致。
spring.thymeleaf.encoding= UTF-8
spring.thymeleaf.content-type= text/html
spring.thymeleaf.mode= HTML5

编写模板

 

 

    11.2 Freemarker

引入pom坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

 配置文件配置:

spring.freemarker.template-loader-path= classpath:/templates/
spring.freemarker.suffix= .ftl
spring.freemarker.content-type= text/html
spring.freemarker.charset= UTF-8
spring.freemarker.settings.number_format= '0.##'

 模板编写

 

12.Spring boot单元测试

(1)相关pom

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.4.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

(2)Service层测试

package com.example.demo.test;

import com.example.demo.Service.UseService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {
//自动注入Service
    @Resource
    MyService myService;
//右击run进行测试
    @Test
    public void getLearn(){
        String demo = useService.demo(1);
        System.out.println(demo);

    }
}

(3)Controller层测试

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑重其事,鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值