目录
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("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层测试