package com.cloudroam.common.configuration; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.cloudroam.common.interceptor.PrintSqlInterceptor; import com.cloudroam.common.interceptor.SqlInterceptor; import com.cloudroam.module.log.MDCAccessServletFilter; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import io.github.talelin.autoconfigure.bean.PermissionMetaCollector; import com.cloudroam.common.interceptor.RequestLogInterceptor; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author * @author * * 公共配置 */ //@Configuration(proxyBeanMethods = false) @Configuration public class CommonConfiguration { @Bean public RequestLogInterceptor requestLogInterceptor() { return new RequestLogInterceptor(); } @Bean public InnerInterceptor sqlInterceptor(){ return new SqlInterceptor(); } /** * 新的分页插件,一缓和二缓遵循mybatis的规则 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // interceptor.addInnerInterceptor(sqlInterceptor()); return interceptor; } // @Bean // public PrintSqlInterceptor printSqlInterceptor(){ // return new PrintSqlInterceptor(); // } @Bean @SuppressWarnings("deprecation") public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.setUseDeprecatedExecutor(false); } @Bean public ISqlInjector sqlInjector() { return new DefaultSqlInjector(); } /** * 记录每个被 @PermissionMeta 记录的信息,在beans的后置调用 * * @return PermissionMetaCollector */ @Bean public PermissionMetaCollector postProcessBeans() { return new PermissionMetaCollector(); } /** * 接口中,自动转换的有:驼峰转换为下划线,空值输出null */ @Bean public Jackson2ObjectMapperBuilderCustomizer customJackson() { return jacksonObjectMapperBuilder -> { jacksonObjectMapperBuilder.failOnUnknownProperties(false); jacksonObjectMapperBuilder.propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); }; } /** * 用于将 request 相关信息(如请求 url)放入 MDC 中供日志使用 * * @return Logback 的 MDCInsertingServletFilter */ @Bean public FilterRegistrationBean mdcInsertingServletFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); MDCAccessServletFilter mdcAccessServletFilter = new MDCAccessServletFilter(); filterRegistrationBean.setFilter(mdcAccessServletFilter); filterRegistrationBean.setName("mdc-access-servlet-filter"); return filterRegistrationBean; } }