0
点赞
收藏
分享

微信扫一扫

冰心商城项目实战1.1 springcloud+springboot+redis+vue+mysql+jdk1.8+git+swagger

1.创建项目

1级项目

kmall2109

2级项目

kmall2109-common(公共资源)

kmall2109-registry(注册中心)

kmall2109-user-service(服务消费)

kmall2109-gateway(网关)

3. kmall2109添加依赖 删除src目录

<packaging>pom</packaging>

<properties>
    <cloud.version>Hoxton.SR12</cloud.version>
    <common.version>1.0-SNAPSHOT</common.version>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>cn.kgc</groupId>
            <artifactId>kmall2109-common</artifactId>
            <version>${common.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

4.kmall2109-registry添加依赖

<dependencies>
    <!--eureka client-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

4.1 yml配置

server:
  port: 7001

spring:
  application:
    name: kmall-registry

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
    register-with-eureka: true
    fetch-registry: false

4.2 启动类

@SpringBootApplication @EnableEurekaServer

5. kmall2109-user-service 添加依赖

<dependencies>
    <!--kmall common-->
    <dependency>
        <groupId>cn.kgc</groupId>
        <artifactId>kmall2109-common</artifactId>
    </dependency>
    <!--web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--eureka client-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--mybatis plus-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.1</version>
    </dependency>
    <!--test-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <!--作用域测试的时候才会使用-->
        <scope>test</scope>
    </dependency>
    <!--mybatis plus-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.5.2</version>
    </dependency>
    <!--freemaart-->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
    </dependency>
<!--redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redis应用连接池-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>
</dependencies>

5.2 yml配置

server:
  port: 10000

spring:
  application:
    name: kmall-user-service
  datasource:
    username: root
    password: 1234
    url: jdbc:mysql:///kmalldb
  jackson:
    date-format: yyyy-MM-dd
    time-zone: GMT+8
  redis:
    host: localhost
    port: 6379
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
    register-with-eureka: true
    fetch-registry: true #服务列表获取别的服务列表
logging:
  level:
    cn.kgc: debug

5.3 启动类

@SpringBootApplication
@EnableEurekaClient
@MapperScan("cn.kgc.*.mapper")

5.4 mybatis-plus代码生成类

String url = "jdbc:mysql:///kmalldb";
String username = "root";
String password = "1234";
String author = "kgc";
String outputDir = "D:\\java2109springclound\\kmall2109\\kmall2109-user-service\\src\\main\\java";
String parent = "cn.kgc";
String moduleName = "user";
String outputFile = "D:\\java2109springclound\\kmall2109\\kmall2109-user-service\\src\\main\\resources\\mapper\\" + moduleName;
List<String> tables = Arrays.asList("kmall_user","kmall_role","kmall_menu","kmall_role_menu");
String prefix = "kmall_";
FastAutoGenerator.create(url, username, password)
        .globalConfig(builder -> {
            builder.author(author) // 设置作者
                    //.enableSwagger() // 开启 swagger 模式
                    //.fileOverride() // 覆盖已生成文件
                    .outputDir(outputDir); // 指定输出目录
        })
        .packageConfig(builder -> {
            builder.parent(parent) // 设置父包名
                    .moduleName(moduleName) // 设置父包模块名
                    .pathInfo(Collections.singletonMap(OutputFile.xml, outputFile)); // 设置mapperXml生成路径
        })
        .strategyConfig(builder -> {
            builder.addInclude(tables) // 设置需要生成的表名
                    .addTablePrefix(prefix); // 设置过滤表前缀
        })
        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
        .execute();

5.4.1 表里加个字段avatar

5.5 UserController层

@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;
    @GetMapping("/list")
    public Result<List<User>> getUserList(){
        List<User> list = userService.list();
        return Result.success(list);
    }
    @PostMapping("/login")
    public Result<Map<String,Object>> login(@RequestBody User param){
        return userService.login(param);
    }
    @GetMapping("/info")
    public Result<Map<String,Object>> getUserInfoByToken(@RequestParam("token") String token){
        // 通过token 到redis里面获取值(user)

        Result result = userService.getUserInfoByToken(token);

       /* Map<String,Object> data = new HashMap<>();
        data.put("roles", Arrays.asList("admin"));
        data.put("avatar","https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
        data.put("name","admin");*/
        return result;
    }
    @PostMapping("/logout")
    public Result<String> logout(@RequestHeader("X-Token")String token){
        // 非前后端的传统项目,这里需要清空session
        // 清楚redis中的登录信息
        //userService.login(token);
        userService.logout(token);
        return Result.success();
    }
}

5.5.1 config.RedisConfig  redis配置

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(factory);

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));

        return redisTemplate;
    }

}

5.6 UserServiceImpl实现类

@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public Result<Map<String,Object>> login(User param) {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("username",param.getUsername());
        wrapper.eq("password",param.getPassword());
        User user = this.baseMapper.selectOne(wrapper);
        if(user == null){
            return Result.fail(20002,"用户名或密码错误");
        }
        // 登录成功,将用户信息写入redis
        String key = "user:"+UUID.randomUUID()+"";
        user.setPassword(null);
                                                 //时间        单位分支 一共60分钟
        redisTemplate.opsForValue().set(key,user,60L, TimeUnit.MINUTES);
        Map<String,Object> data = new HashMap<>();
        data.put("token", key);//先随机产生一个字符串
        return Result.success(data);
    }


   @Override
    public Result getUserInfoByToken(String token) {
        // 通过从redis中获取登录用户信息
        Object obj = redisTemplate.opsForValue().get(token);
        if(obj == null){
            return Result.fail(20003,"登录凭证无效,请重新登录");
        }
        log.debug("--------------->"+obj);
        log.debug("#################>"+JSON.toJSONString(obj));

        User user = JSON.parseObject(JSON.toJSONString(obj),User.class);
        Map<String,Object> data = new HashMap<>();
        data.put("roles", Arrays.asList(user.getRoleId()+""));
        data.put("avatar",user.getAvatar());
        data.put("name",user.getUsername());
        return Result.success(data);
    }

    @Override
    public void logout(String token) {
        redisTemplate.delete(token);
    }

}
return Result.success(data);

6.0 kmall2109-gateway

6.1 添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

    <dependency>
        <groupId>cn.kgc</groupId>
        <artifactId>kmall2109-common</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

6.2 yml配置

server:
  port: 9999

spring:
  application:
    name: kmall-gateway
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowCredentials: true  #设置允许访问携带cookie
            allowedOrigins: "http://localhost:8888"  #可以填写多个域名,用","隔开, "*"代表允许所有
            allowedMethods: "*" #所有方法
            allowedHeaders: "*" #所有请求头信息

      discovery:
        locator:
          enabled: true #按微服务名称转发
          lower-case-service-id: true

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
    register-with-eureka: true
    fetch-registry: true
logging:
  level:
    cn.kgc: debug

6.3 启动类

@SpringBootApplication
@EnableEurekaClient

举报

相关推荐

0 条评论