SpringBoot学习笔记

SpringBoot学习笔记一

一、添加自定义 Filter

参考博客:https://www.cnblogs.com/chenhonggao/p/9027591.html

  1. 新建一个类实现 Filter接口。
  2. 在该类上打上 “@WebFilter(filterName = “testFilter1”, urlPatterns = “/*”)” 注解。"@Order(1)" 注解表示filter的执行顺序,数值越小越先执行。
  3. 在项目入口类上打上 “@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字符串
  1. 引入FastJSON。
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.38</version>
    </dependency>
    
  2. 获取response的输出流。
  3. 将要返回的对象转化成JSON字符串。
  4. 写入输出流。
    PrintWriter out = resp.getWriter();
    ResultDto resultDto = new ResultDto();
    resultDto.setCode("10001");
    resultDto.setMsg("Token error");
    String toJSONString = JSON.toJSONString(resultDto);
    out.write(toJSONString);
    

二、自定义拦截器 Interceptor

  1. 新建自定义拦截器类实现 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);
        }
    }
    
  2. 新建配置类 实现 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

  1. 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>
    
  2. 配置文件配置 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
    
  3. 编写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>
    
  4. 在项目入口类上打上 @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

  1. 导入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>
    
  2. 在实现类上打上 @Compose 和 @Service(dubbo的service)注解
    @Component
    @Service(interfaceClass = GetTokenService.class)
    public class GetTokenServiceImpl implements GetTokenService {
        @Override
        public String sayHello() {
            return "hello world";
        }
    }
    
  3. SpringBoot启动类上打 @EnableDubboConfiguration 注解
    @SpringBootApplication
    @EnableDubboConfiguration
    public class AuthApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(AuthApplication.class, args);
        }
    
    }
    
  4. 配置文件
    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
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值