Spring boot開發總結二(功能應用)

目錄

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("[email protected]");
        message.setTo("[email protected]");
        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("[email protected]");
        helper.setTo("[email protected]");
        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("[email protected]");
            helper.setTo("[email protected]");
            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層測試

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章