我可不允许还有人不会配置SpringBoot项目吧,这里可以看到最完整的项目配置。

1、首先写pom.xml进行引入依赖
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <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>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- log4j2 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--代码生成模板-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>

        <!--分页组件-->
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>

        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>

        <!-- apache commons -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
2、将打包的build标签写入
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
3、创建两套环境,dev和test
spring:
  profiles:
    active: dev
#首先选中dev进入开发环境
  • dev环境
    server:
      port: 8000
    spring:
      redis:
        host: 127.0.0.1
        port: 6379
        lettuce:
          pool:
            max-active: 128
            max-idle: 10
            min-idle: 2
            max-wait: -1
      main:
        allow-circular-references: true
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/c4?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
        username: root
        password: DXZDXZ4811
        type: com.zaxxer.hikari.HikariDataSource
        hikari:
          minimum-idle: 8
          maximum-pool-size: 32
          auto-commit: true
          idle-timeout: 30000
          pool-name: DatebookHikariCP
          max-lifetime: 1800000
          connection-timeout: 10000
          connection-test-query: SELECT 1
    
    mybatis-plus:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.dxz.entity
      global-config:
        banner: false
        db-config:
          id-type: input
    
    pagehelper:
      helperDialect: mysql
      reasonable: true
      supportMethodsArguments: true
      params: count=countSql
      returnPageInfo: check
    
  • test环境
    server:
      port: 8000
    spring:
      redis:
        host: redis
        port: 6379
        lettuce:
          pool:
            max-active: 128
            max-idle: 10
            min-idle: 2
            max-wait: -1
      main:
        allow-circular-references: true
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://mysql:3306/c4?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
        username: root
        password: DXZDXZ4811
        type: com.zaxxer.hikari.HikariDataSource
        hikari:
          minimum-idle: 8
          maximum-pool-size: 32
          auto-commit: true
          idle-timeout: 30000
          pool-name: DatebookHikariCP
          max-lifetime: 1800000
          connection-timeout: 10000
          connection-test-query: SELECT 1
    
    mybatis-plus:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.dxz.entity
      global-config:
        banner: false
        db-config:
          id-type: input
    
    pagehelper:
      helperDialect: mysql
      reasonable: true
      supportMethodsArguments: true
      params: count=countSql
      returnPageInfo: check
    
4、利用mybatis-plus的快速生成代码器进行快速生成代码
  • 代码生成器
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz
     * @class MyQuickCode
     * @date 2022/1/28 13:08
     */
    public class MyQuickCode {
        public static void main(String[] args) {
            //1、构造生成器
            AutoGenerator ag = new AutoGenerator();
            // 2、全局配置
            GlobalConfig gc = new GlobalConfig();
            String projectPath = System.getProperty("user.dir");
            System.out.println(projectPath);
            gc.setOutputDir(projectPath + "/src/main/java");
            gc.setAuthor("fmdxz");
            gc.setOpen(false); //生成后是否打开资源管理器
            gc.setFileOverride(true); //重新生成时文件是否覆盖
            gc.setServiceName("%sService"); //去掉Service接口的首字母I
            gc.setIdType(IdType.ID_WORKER_STR); //主键策略
            gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
    //        gc.setSwagger2(false);//开启Swagger2模式
            ag.setGlobalConfig(gc);
            // 3、数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://localhost:3306/c4?useUnicode=true&characterEncoding=UTF-8" +
                    "&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull" +
                    "&allowMultiQueries=true");
            dsc.setDriverName("com.mysql.cj.jdbc.Driver");
            dsc.setUsername("root");
            dsc.setPassword("DXZDXZ4811");
            dsc.setDbType(DbType.MYSQL);
            ag.setDataSource(dsc);
    
            // 4、包配置
            PackageConfig pc = new PackageConfig();
            pc.setModuleName(null); //模块名
            pc.setParent("com.dxz");
            pc.setController("controller");
            pc.setEntity("entity");
            pc.setService("service");
            pc.setMapper("mapper");
            ag.setPackageInfo(pc);
    
            // 5、策略配置
            StrategyConfig strategy = new StrategyConfig();
            strategy.setInclude("comments","url");//对那一张表生成代码
            strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
    //        strategy.setTablePrefix("t_"); //生成实体时去掉表前缀
    
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
            strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
    
            strategy.setRestControllerStyle(true); //restful api风格控制器
    //        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
    
            ag.setStrategy(strategy);
    
            // 6、执行
            ag.execute();
        }
    }
    
5、将mybatis-plus的配置填写完成
  • 配置
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.config
     * @class MybatisConfig
     * @date 2022/1/28 14:13
     */
    @Configuration
    @MapperScan(value = "com.dxz.mapper")
    public class MybatisPlusConfig {
        // 最新版
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
        }
    }
    
6、将redis的配置写好
  • redis配置
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.config
     * @class RedisConfig
     * @date 2022/1/28 14:14
     */
    @Configuration
    public class RedisConfig {
    
        @Value("${spring.redis.host}")
        private String host;
    
        @Value("${spring.redis.port}")
        private int port;
    
        @Value("${spring.redis.lettuce.pool.max-active}")
        private Integer maxActive;
    
        @Value("${spring.redis.lettuce.pool.max-idle}")
        private Integer maxIdle;
    
        @Value("${spring.redis.lettuce.pool.min-idle}")
        private Integer minIdle;
    
        @Value("${spring.redis.lettuce.pool.max-wait}")
        private Long maxWait;
    
        /**
         * @Description: 获取redis连接工厂
         * @Author: fmdxz
         * @Date: 2022/1/21
         */
        @Bean
        LettuceConnectionFactory redisConnectionFactory(){
            //连接池的配置
            GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();//新建一个连接池配置
            poolConfig.setMaxTotal(maxActive);
            poolConfig.setMaxIdle(maxIdle);
            poolConfig.setMinIdle(minIdle);
            poolConfig.setMaxWaitMillis(maxWait);
            //根据自己写的连接池的配置进行新建一个lettuce连接池配置
            LettucePoolingClientConfiguration lettucePoolingClientConfiguration =
                    LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build();
            //新建一个redis配置
            RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
            redisConfig.setHostName(host);
            redisConfig.setPort(port);
            //配置redis连接密码,若没有密码则可以直接注释
            //redisConfig.setPassword(RedisPassword.of(password.toCharArray()));
            //返回一个新的lettuce连接工厂
            return new LettuceConnectionFactory(redisConfig,lettucePoolingClientConfiguration);
        }
    
        @Bean
        public RedisTemplate<String,Object> myRedisTemplate(LettuceConnectionFactory redisConnectionFactory){
            //新建一个template模板
            RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
            //将上面创建好的lettuce工厂导入
            template.setConnectionFactory(redisConnectionFactory);
            template.setKeySerializer(new StringRedisSerializer());// key序列化
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());// value序列化
            template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());// Hash key序列化
            template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());// Hash value序列化
            return template;
        }
    
    }
    
7、含有日期和结果的工具类
  • 日期工具类
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.utils
     * @class DateUtil
     * @date 2022/1/28 13:17
     */
    @Component
    public class DateUtil {
        //首先创建一个时间转换工具类
        private static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //创建一个日志工具
        protected static Logger logger = LoggerFactory.getLogger(DateUtil.class);//参数为当前类
    
        /** 
        * @Description: 将日期转换为String
        * @Author: fmdxz
        * @Date: 2022/1/29
        */
        public static String parse(final Date date) {
            if (date == null) {
                return null;
            }
            return sdf.format(date);
        }
    
        /** 
        * @Description: 获取当前时间的字符串
        * @Author: fmdxz
        * @Date: 2022/1/29
        */
        public static String now() {
            return sdf.format(new Date());
        }
    
        /**
        * @Description: 将日期字符串转换为日期对象
        * @Author: fmdxz
        * @Date: 2022/1/29
        */
        public static Date format(final String date) {
            try {
                return sdf.parse(date);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    
  • 结果工具类
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.utils
     * @class ResultUtil
     * @date 2022/1/28 13:22
     */
    public abstract class ResultUtil {
        private static JSONObject results = null;
    
        public static JSONObject success() {
            results = new JSONObject();
            results.put("code", Constant.SUCCESS_CODE);
            results.put("data", new JSONObject());
            results.put("msg", "");
            return results;
        }
    
        public static JSONObject success(final int code, final JSONObject data) {
            results = new JSONObject();
            results.put("code", code);
            results.put("data", data);
            results.put("msg", "");
            return results;
        }
    
        public static JSONObject content(final JSONObject data) {
            results = new JSONObject();
            results.put("code", Constant.SUCCESS_CODE);
            results.put("data", data);
            results.put("msg", "");
            return results;
        }
    
        public static JSONObject failure(final int code, final String msg) {
            results = new JSONObject();
            results.put("code", code);
            results.put("data", new JSONObject());
            results.put("msg", msg);
            return results;
        }
    }
    
8、关于Redis的接口类和服务类
  • 接口类
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.mapper
     * @class RedisMapper
     * @date 2022/1/28 19:41
     */
    @Component
    public class RedisMapper {
    
        @Autowired
        @Qualifier("myRedisTemplate")
        private RedisTemplate<String,Object> redisTemplate;
    
        public void set(String key,Object value){
            try{
                ValueOperations<String,Object> stringObjectValueOperations = redisTemplate.opsForValue();
                stringObjectValueOperations.set(key,value);
            }catch (Exception e){
                throw new RuntimeException(e);
            }
        }
    
        public void set(String key, Object value, long expired){
            try{
                ValueOperations<String,Object> stringObjectValueOperations = redisTemplate.opsForValue();
                stringObjectValueOperations.set(key,value,expired, TimeUnit.SECONDS);
            }catch (Exception e){
                throw new RuntimeException(e);
            }
        }
    
        public Object get(String key){
            try{
                ValueOperations<String,Object> stringObjectValueOperations = redisTemplate.opsForValue();
                return stringObjectValueOperations.get(key);
            }catch (Exception e){
                throw new RuntimeException(e);
            }
        }
    }
    
  • 服务接口类
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.service
     * @class RedisService
     * @date 2022/1/28 19:42
     */
    public interface RedisService {
    
        /**
         * @Description: 传入key和value
         * @Author: fmdxz
         * @Date: 2022/1/21
         */
        void set(String key,Object value);
    
        /**
         * @Description: 传入key和value带过期时间
         * @Author: fmdxz
         * @Date: 2022/1/22
         */
        void set(String key,Object value,long expired);
    
        /**
         * @Description: 通过key获取value
         * @Author: fmdxz
         * @Date: 2022/1/21
         */
        <T> T get(String key);
    }
    
  • 服务实现类
    /**
     * @author Administrator
     * @version 1.0
     * @package com.dxz.service.impl
     * @class RedisServiceImpl
     * @date 2022/1/28 19:43
     */
    @Service
    public class RedisServiceImpl implements RedisService {
        @Resource
        RedisMapper redisMapper;
    
        @Override
        public void set(String key, Object value) {
            redisMapper.set(key,value);
        }
    
        @Override
        public void set(String key, Object value, long expired) {
            redisMapper.set(key,value,expired);
        }
    
        @Override
        public <T> T get(String key) {
            Object o = redisMapper.get(key);
            return (T) o;
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺平崽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值