SpringBoot学习笔记一
一、添加自定义 Filter
参考博客:https://www.cnblogs.com/chenhonggao/p/9027591.html
- 新建一个类实现 Filter接口。
- 在该类上打上 “@WebFilter(filterName = “testFilter1”, urlPatterns = “/*”)” 注解。"@Order(1)" 注解表示filter的执行顺序,数值越小越先执行。
- 在项目入口类上打上 “@ServletComponentScan” 注解。
自定义Filter类:
```
package com.jczry.springbootDemo.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @program: springbootdemo
* @description:
* @author: chen jie
* @create: 2019-02-13 13:54
*/
@WebFilter(urlPatterns = "/user/list/*", filterName = "tokenFilter")
@Order(1)
@Slf4j
public class TokenFilter implements Filter {
@Override
public void init(FilterConfig filterConfig){
log.info("Token filter init()...........");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
log.info("request url:{}", request.getRequestURL());
String token = request.getParameter("token");
if("".equals(token) || null == token){
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("token error");
}else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
}
```
项目入口类:
```
package com.jczry.springbootDemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ServletComponentScan
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
```
Filter返回JSON字符串
- 引入FastJSON。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.38</version> </dependency>
- 获取response的输出流。
- 将要返回的对象转化成JSON字符串。
- 写入输出流。
PrintWriter out = resp.getWriter(); ResultDto resultDto = new ResultDto(); resultDto.setCode("10001"); resultDto.setMsg("Token error"); String toJSONString = JSON.toJSONString(resultDto); out.write(toJSONString);
二、自定义拦截器 Interceptor
- 新建自定义拦截器类实现 HandlerInterceptor 接口。
public class LogInterceptor implements HandlerInterceptor { long start; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { start = System.currentTimeMillis(); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { long end = System.currentTimeMillis(); log.info("interceptor cost:{}", (end - start)/1000.0); } }
- 新建配置类 实现 WebMvcConfigurer 接口, 重写 addInterceptors() 方法。
@Configuration public class InterceptorConfigurer implements WebMvcConfigurer{ @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration registration = registry.addInterceptor(new LogInterceptor()); registration.addPathPatterns("/user/**"); registration.excludePathPatterns("/login"); } }
三、SpringBoot整合Mybatis
参考博客:https://www.cnblogs.com/peterxiao/p/7779188.html
- Maven 引入 Mybatis 和 Druid。
mybatis: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.5</version> </dependency>
- 配置文件配置 Mybatis。
application-dev.yml:server: port: 8088 spring: datasource: username: root password: xxxxx url: jdbc:mysql://172.x.x.x:3316/xxx?useSSL=false driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource mybatis: mapper-locations: classpath:mapper/*.xml # type-aliases-package: com.example.entity com.jczry.springbootDemo.domain.UserMapper #showSql logging: level: com.jczry.springbootDemo.domain: debug
- 编写dao层接口和mapper.xml文件,与原SSM写法相同。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.jczry.springbootDemo.domain.UserMapper"> <resultMap id="userMap" type="com.jczry.springbootDemo.domain.User"> <result column="name" property="name"/> <result column="username" property="username"/> </resultMap> <select id="queryUserByName" resultMap="userMap"> select name, username from c_user where name like CONCAT('%',#{name}, '%') </select> </mapper>
- 在项目入口类上打上 @MapperScan(“com.jczry.springbootDemo.domain”) 注解,“com.jczry.springbootDemo.domain” 为dao层接口所在包。
@SpringBootApplication @ServletComponentScan//自定义Filter打的注解 @MapperScan("com.jczry.springbootDemo.domain")//mapper打的注解 public class SpringbootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDemoApplication.class, args); } }
四、整合Dubbo
- 导入maven依赖
<!--dubbo--> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> <exclusions> <!--与spring-boot-starter下spring-boot-starter-logging的logback冲突--> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> </dependency>
- 在实现类上打上 @Compose 和 @Service(dubbo的service)注解
@Component @Service(interfaceClass = GetTokenService.class) public class GetTokenServiceImpl implements GetTokenService { @Override public String sayHello() { return "hello world"; } }
- SpringBoot启动类上打 @EnableDubboConfiguration 注解
@SpringBootApplication @EnableDubboConfiguration public class AuthApplication { public static void main(String[] args) { SpringApplication.run(AuthApplication.class, args); } }
- 配置文件
spring: dubbo: application: name: open-auth-provider id: open-auth-provider protocol: id: dubbo name: dubbo port: 20880 scan: base-packages: com.x.x.x.auth.service registry: address: zookeeper://172.x.x.x:2181?backup=172.x.x.x:2181,172.x.x.x:2181 provider: validation: true