目錄
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屬性詳解
cron 參數接收一個
cron表達式,字符串,點擊查看
zone 時區,
默認"",爲該服務器所在時區
fixedDelay 上一次執行完畢時間點之後多長時間再執行,數字
fixedDelayString 與fixedDelay相同,字符串,支持佔位符
//配置文件中有配置:time.fixedDelay=5000 @Scheduled(fixedDelayString = "${time.fixedDelay}")
fixedRate 上一次開始執行時間點之後多長時間再執行,數字
fixedRateString 與fixedRate相同,字符串,支持佔位符
initialDelay 第一次延遲多長時間後再執行,數字
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層測試