尚筹网2-1.项目环境搭建

一、项目功能梳理

1.后台管理系统

  • 权限管理
    • 用户维护 √
    • 角色维护 √
    • 菜单维护 √
  • 业务审核
    • 实名认证审核
    • 广告审核
    • 项目审核 √

2.前台会员系统

  • 用户模块
  • 项目模块
  • 订单/支付模块

二、项目架构设计

了解或介绍一个项目架构的步骤:

  • 确定总体上是单一架构还是分布式架构
    • 单一架构
      • 数据库
      • 框架
      • 前端技术
      • 确定工程之间的关系
        • 继承关系(Maven提供)
        • 聚合关系(Maven提供)
        • 依赖关系(Maven提供)
    • 分布式架构
      • 确定Dubbo+Zookeeper还是SpringBoot+SpringCloud
      • 确定整个项目中有哪些工程
      • 确定工程之间的关系
        • 继承关系(Maven提供)
        • 聚合关系(Maven提供)
        • 依赖关系(Maven提供)
        • 调用关系(远程调用技术提供)
      • 每个工程的大致作用
      • 用到了哪些中间件(Redis、文件存储服务器、消息队列、搜索引擎……)

三、创建数据库

CREATE DATABASE `distributed-crowd` CHARACTER SET utf8 COLLATE utf8_bin;

四、项目工程创建

1.父工程

①坐标

groupId:com.rgh.crowd

artifactId:distribution-crowd-parent

packaging:pom

②属性声明


    
    2.0.7.RELEASE
    
    Finchley.SR2
    
    2.5
    3.6
    1.10
    1.9.3
    3.2.2
    3.6.1
    1.3.2
    1.4
    
    4.12
    
    2.9.9
    
    4.5.3
    
    3.16
    2.2.3
    
    1.1.0
    5.1.42
    
    5.0.11.RELEASE
    1.3.2
    
    5.0.3
    
    2.9.8
    
    1.3.5
    
    1.2.17
    1.7.6
    1.2.3
    
    2.5
    2.2
    1.2

③依赖管理



    
        
        
            org.springframework.boot
            spring-boot-dependencies
            ${spring-boot.version}
            pom
            import
        
        
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
        
        
            commons-io
            commons-io
            ${commons-io.version}
        
        
            org.apache.commons
            commons-lang3
            ${commons-lang3.version}
        
        
            commons-codec
            commons-codec
            ${commons-codec.version}
        
        
            commons-beanutils
            commons-beanutils
            ${commons-beanutils.version}
        
        
            commons-collections
            commons-collections
            ${commons-collections.version}
        
        
            org.apache.commons
            commons-math3
            ${commons-math3.version}
        
        
            commons-fileupload
            commons-fileupload
            ${commons.fileupload}
        
        
            org.apache.commons
            commons-email
            ${commons-email.version}
        
        
        
        
            junit
            junit
            ${junit.version}
            test
        

        
        
            joda-time
            joda-time
            ${joda-time.version}
        
        
        
            org.apache.httpcomponents
            httpclient
            ${httpclient.version}
        
        
        
            redis.clients
            jedis
            2.9.0
        

        
            mysql
            mysql-connector-java
            ${mysql.connector}
        
        
            com.alibaba
            druid
            ${druid.version}
        
        
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-tx
            ${spring.version}
        
        
            org.springframework
            spring-core
            ${spring.version}
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
            org.springframework
            spring-orm
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            org.springframework
            spring-webmvc-portlet
            ${spring.version}
        
        
            org.springframework
            spring-test
            ${spring.version}
            test
        
        
            org.springframework
            spring-context-support
            ${spring.version}
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            ${mybatis.spring.boot.starter}
        
        
        
        
            com.github.pagehelper
            pagehelper
            ${pagehelper.version}
        
        
        
            com.fasterxml.jackson.core
            jackson-core
            ${jackson.version}
        
        
            com.fasterxml.jackson.core
            jackson-databind
            ${jackson.version}
        
        
        
            org.mybatis.generator
            mybatis-generator-core
            ${mbg.version}
        

        
        
            log4j
            log4j
            ${log4j.version}
        
        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        
        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        
        
        
            javax.servlet.jsp
            jsp-api
            ${jsp-api.version}
            provided
        
        
            javax.servlet
            servlet-api
            ${servlet-api.version}
            provided
        
        
            javax.servlet
            jstl
            ${jstl.version}
        
        
            ch.qos.logback
            logback-classic
            ${logback.version}
        
    

2.公共模块工程

①坐标

groupId:com.rgh.crowd

artifactId:distribution-crowd-1-common

packaging:jar

②创建方式

建议通过Maven Module的方式创建子工程,好处是能够自动做好继承和聚合的配置。操作方法是在父工程上点右键→New→Maven Module

3.注册中心

①坐标

groupId:com.rgh.crowd

artifactId:distribution-crowd-2-registry-center

packaging:jar

[注:同样是Maven Module]

②依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server

P.S.:当前工程的父工程(parent)已经通过import范围引入了SpringBoot和SpringCloud的依赖信息,所以当前工程不需要直接继承SpringBoot或SpringCloud。

③配置文件

application.yml

server:
  port: 1000
  
eureka:
  instance:
    hostname: registry-center
  client:
    register-with-eureka: false #自己就是注册中心,不用注册自己
    fetch-registry: false #不从其他注册中心取回服务地址
    service-url:
       defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

④主启动类

package com.rgh.crowd;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class CrowdMainType {
    public static void main(String[] args) {
        SpringApplication.run(CrowdMainType.class, args);
    }
}

4.数据库服务工程

①坐标

groupId:com.rgh.crowd

artifactId:distribution-crowd-3-database-provider

packaging:jar

[注:同样是Maven Module]

②依赖


    org.springframework.boot
    spring-boot-starter-jdbc


    org.mybatis.spring.boot
    mybatis-spring-boot-starter


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


    org.springframework.boot
    spring-boot-starter-web


    mysql
    mysql-connector-java
    runtime


    org.springframework.boot
    spring-boot-starter-test
    test

③配置文件

mybatis-config.xml




application.yml

server:
  port: 2000
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://192.168.56.200:3306/distributed-crowd?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: database-provider #当前微服务名称,注册服务信息时必须有
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1000/eureka/
  instance:
    prefer-ip-address: true

④主启动类

// @EnableEurekaClient 专门针对Eureka注册中心
@EnableDiscoveryClient // 更为通用
@MapperScan("com.rgh.crowd.mapper") // 配置MyBatis的Mapper接口所在包进行自动扫描,配置了这个注解才能够将Mapper接口类型的bean注入Service。另外一种扫描Mapper的方法是在具体Mapper接口上使用@Mapper
@SpringBootApplication
public class CrowdMainType {
    public static void main(String[] args) {
        SpringApplication.run(CrowdMainType.class, args);
    }
}

@EnableEurekaClient 专门针对Eureka注册中心

@EnableDiscoveryClient 更为通用

@MapperScan("com.rgh.crowd.mapper") 配置MyBatis的Mapper接口所在包进行自动扫描,配置了这个注解才能够将Mapper接口类型的bean注入Service。另外一种扫描Mapper的方法是在具体Mapper接口上使用@Mapper

⑤获取数据库连接测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class CrowdTest {
    @Autowired
    private DataSource dataSource;
    @Test
    public void testDataBaseConnection() throws SQLException {
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }
}

使用基于SpringBoot提供的测试需要注意:测试类所在的包,也必须是主启动类所在包的子包,才能够享受到包的自动扫描——除非是在主启动类上使用了@ComponentScan注解明确指定了扫描的包。

⑥数据库连不上的可能原因

  • MySQL服务是否启动
  • IP地址是否正确
  • MySQL数据库名称是否正确
  • Linux防火墙是否关闭
  • 用户名、密码(如果数据库密码是以0开头的,则需要加引号)

5.Redis服务工程

①坐标

groupId:com.rgh.crowd

artifactId:distribution-crowd-4-redis-provider

packaging:jar

[注:同样是Maven Module]

②依赖


    org.springframework.boot
    spring-boot-starter-data-redis


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


    org.springframework.boot
    spring-boot-starter-test
    test

③配置文件

server:
  port: 3000
spring:
  application:
    name: redis-provider
  redis:
    host: 192.168.56.150
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1000/eureka/
  instance:
    prefer-ip-address: true

④主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class CrowdMainType {
    public static void main(String[] args) {
        SpringApplication.run(CrowdMainType.class, args);
    }
}

⑤访问Redis测试

@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void testRedisTemplate() {
    redisTemplate.opsForValue().set("pig", "red");
}
@Test
public void testStringRedisTemplate() {
    stringRedisTemplate.opsForValue().set("newYear", "oleYear");
}

6.用户管理模块

①坐标

groupId:com.rgh.crowd

artifactId:distribution-crowd-5-member-manager

packaging:jar

[注:同样是Maven Module]

②依赖

用户管理模块不需要操作数据库,也不需要操作Redis,这些操作全部交给后面的Provider了,加入Web场景即可。而用户界面在前端工程展示,所以也不需要加入视图。

为了能够和Eureka注册中心交互还需要加入Eureka客户端。


    org.springframework.boot
    spring-boot-starter-web



    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

③配置文件

server:
  port: 4000
spring:
  application:
    name: member-manager

eureka:
  client:
    service-url:
      defaultZone: http://localhost:1000/eureka/
  instance:
    prefer-ip-address: true

④主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class CrowdMainType {
    public static void main(String[] args) {
        SpringApplication.run(CrowdMainType.class, args);
    }
}

7.建立依赖关系

除了注册中心,database-provider、redis-provider和member-manager都需要依赖公共模块。


    com.rgh.crowd
    distribution-crowd-1-common
    1.0-SNAPSHOT

※Consumer调用Provider方式梳理

你可能感兴趣的:(尚筹网2-1.项目环境搭建)