> 文档中心 > springboot,mybatis-puls,mysql,redis基础架子

springboot,mybatis-puls,mysql,redis基础架子

springboot: 2.6.6 , springcloud: 2021.0.1 ,spring-cloud-alibaba: 2021.0.1.0pom文件:
    4.0.0     org.springframework.boot spring-boot-starter-parent 2.6.6         xxx    xz    1.1.0-SNAPSHOT    jar     2021.0.1 2021.0.1.0 3.4.0 2.0.0 1.2.67 0.9.1 2.9.2 1.5.22 5.4.2 4.1.2 3.13.6 2.3 true                org.springframework.cloud  spring-cloud-dependencies  ${spring-cloud.version}  pom  import            com.alibaba.cloud  spring-cloud-alibaba-dependencies  ${spring-cloud-alibaba.version}  pom  import                    org.springframework.boot     spring-boot-starter       org.springframework.boot     spring-boot-starter-web       org.springframework.boot     spring-boot-starter-actuator       org.springframework.boot     spring-boot-starter-test       org.springframework.security     spring-security-crypto       org.projectlombok     lombok       org.springframework.boot     spring-boot-starter-data-redis       org.redisson     redisson-spring-boot-starter     ${redisson.version}       org.springframework.cloud     spring-cloud-starter-bootstrap       com.alibaba.cloud     spring-cloud-starter-alibaba-nacos-discovery       com.alibaba.cloud     spring-cloud-starter-alibaba-nacos-config       com.baomidou     mybatis-plus-boot-starter     ${mybatis-plus.version}       com.baomidou     mybatis-plus-generator     ${mybatis-plus.version}       com.baomidou     mybatis-plus-extension     ${mybatis-plus.version}       mysql     mysql-connector-java       com.github.ulisesbocchio     jasypt-spring-boot-starter     ${jasypt.spring.boot.starter.version}       com.alibaba     fastjson     ${fastjson.version}        io.springfox     springfox-swagger2     ${swagger2.version}       io.springfox     springfox-swagger-ui     ${swagger2.version}       io.swagger     swagger-annotations     ${io.swagger.version}       io.swagger     swagger-models     ${io.swagger.version}       org.apache.poi     poi-ooxml     ${poi-ooxml.version}       cn.hutool     hutool-all     ${hutool.version}       io.jsonwebtoken     jjwt     ${jwt.version}       org.apache.commons     commons-lang3       org.aspectj     aspectjweaver       org.apache.velocity     velocity-engine-core     ${velocity-engine-core.version}       javax.validation     validation-api          xxxx        org.springframework.boot  spring-boot-maven-plugin          

配置文件:

server:  port: 8080spring:  servlet:    multipart:      max-file-size: 2048MB      max-request-size: 10240MB  jackson:    default-property-inclusion: non_null    date-format: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8  mvc:    pathmatch:      matching-strategy: ant-path-matcher  redis:    password: ${redis.cluster.password}    cluster:      nodes: ${redis.cluster.nodes}      max-redirects: 3    lettuce:      pool: max-idle: 16  #最大空闲连接 默认为8 max-active: 32#最大连接数(使用负值表示没有限制) 默认为8 min-idle: 8   #最小空闲连接 默认为 0 max-wait: 5000ms     #最大阻塞等待时间(使用负值表示没有限制) 默认为-1  datasource:    url: jdbc:mysql://${db.host}:${db.port}/${db.database}?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&tinyInt1isBit=false    username: ${db.username}    password: ${db.password}#---------------------------  mybatis-plus-------------------------mybatis-plus:  mapper-locations: classpath*:com//mapping/*.xml  global-config:    db-config:      id-type: auto      logic-delete-value: 1      logic-not-delete-value: 0  configuration:    map-underscore-to-camel-case: true    cache-enabled: true    lazyLoadingEnabled: true    multipleResultSetsEnabled: true    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
package ;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Profile;import org.springframework.util.ReflectionUtils;import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.ParameterBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.schema.ModelRef;import springfox.documentation.service.ApiInfo;import springfox.documentation.service.Parameter;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/ * Swagger配置 */@EnableSwagger2@Configuration@Profile({"dev","test","poc","future", "local"})public class SwaggerConfig {    @Bean    public Docket authzApi() { //增加头部参数 ParameterBuilder headerParam = new ParameterBuilder(); headerParam.name("token").description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); /*ParameterBuilder appKeyParam = new ParameterBuilder(); appKeyParam.name("appKey").description("appKey").modelRef(new ModelRef("string")).parameterType("header").required(false).build();*/ List parameterList = new ArrayList(); parameterList.add(headerParam.build()); //parameterList.add(appKeyParam.build()); return new Docket(DocumentationType.SWAGGER_2)  .apiInfo(apiInfo("接口文档","接口文档","1.0.0")) .select()  .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))  //.apis(RequestHandlerSelectors.basePackage("com.*.*"))  .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))  .paths(PathSelectors.any())  .build()  .groupName("v1.0.1")  .globalOperationParameters(parameterList).enable(true)  ;    }    private ApiInfo apiInfo(String name, String description, String version) { return  new ApiInfoBuilder().title(name).description(description).version(version).build();    }    @Bean    public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { return new BeanPostProcessor() {     @Override     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {  if (bean instanceof WebMvcRequestHandlerProvider ) {      customizeSpringfoxHandlerMappings(getHandlerMappings(bean));  }  return bean;     }     private  void customizeSpringfoxHandlerMappings(List mappings) {  List copy = mappings.stream()   .filter(mapping -> mapping.getPatternParser() == null)   .collect(Collectors.toList());  mappings.clear();  mappings.addAll(copy);     }     @SuppressWarnings("unchecked")     private List getHandlerMappings(Object bean) {  try {      Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");      field.setAccessible(true);      return (List) field.get(bean);  } catch (IllegalArgumentException | IllegalAccessException e) {      throw new IllegalStateException(e);  }     } };    }}
RedisConfig: 
package ;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {    /     * 管理缓存     */    @Bean    public CacheManager cacheManager(RedisConnectionFactory factory) { return RedisCacheManager.create(factory);    }    /     * RedisTemplate配置     */    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory factory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); redisTemplate.setConnectionFactory(factory); return redisTemplate;    }    @Bean    public StringRedisTemplate strRedisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(factory); return template;    }}
MybatisPlusConfig: 
package ;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.transaction.annotation.EnableTransactionManagement;/ * MyBatisPlus配置 */@EnableTransactionManagement@Configurationpublic class MybatisPlusConfig {    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor;    }}
CodeGenerator: 
package ;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.InjectionConfig;import com.baomidou.mybatisplus.generator.config.*;import com.baomidou.mybatisplus.generator.config.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import org.apache.commons.lang3.StringUtils;import java.util.ArrayList;import java.util.List;public class CodeGenerator {    private static String projectPath = "D:\\AAA";    private static String modularName = "bu";    public static GlobalConfig gc() { GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(projectPath); gc.setAuthor("NIUBI"); gc.setOpen(false); gc.setSwagger2(true); return gc;    }    public static DataSourceConfig dsc() { DataSourceConfig dsc = new DataSourceConfig(); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername(""); dsc.setPassword(""); dsc.setUrl("jdbc:mysql://xx.xx.xxx:3306/ku?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=true&serverTimezone=Asia/Shanghai"); return dsc;    }    public static PackageConfig packageConfig(){ PackageConfig pc = new PackageConfig(); String standardModularPath = ""; if(StringUtils.isNotBlank(modularName)){     standardModularPath += "." + modularName; } pc.setParent(standardModularPath); pc.setEntity("model"); pc.setMapper("dao"); pc.setXml("dao.mapping"); pc.setService("service"); pc.setController("controller"); pc.setServiceImpl("service.impl"); return pc;    }    public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 mpg.setGlobalConfig(gc()); // 数据源配置 mpg.setDataSource(dsc()); // 包配置 PackageConfig pc = packageConfig(); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() {     @Override     public void initMap() {  // to do nothing     } }; // String templatePath = "/templates/mapper.xml.ftl"; String templatePath = "/templates/mapper.xml.vm"; List focList = new ArrayList(); focList.add(new FileOutConfig(templatePath) {     @Override     public String outputFile(TableInfo tableInfo) {  return projectPath + "/" + pc.getParent().replaceAll("\\.", "/") + "/" + pc.getXml().replaceAll("\\.", "/") + "/" + tableInfo.getEntityName() + "Mapper.xml";     } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); //strategy.setTablePrefix("t_"); //strategy.setSuperEntityClass(BaseEntity.class); //strategy.setSuperControllerClass(BaseController.class); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setInclude(  "需要生成的表" ); strategy.setControllerMappingHyphenStyle(true); mpg.setStrategy(strategy); mpg.execute();    }}