跳至主要內容

后端启动

大约 10 分钟快速启动快速启动后端启动

提示

因为Seata不支持SQL Server,DATASOURCE模式必须使用Seata,所以DATASOURCE模式也不支持 SQL Server。

修改配置并编译项目

  1. 创建数据库:根据你使用的数据库选择正确的创建数据库SQL语句

    4.9.0 之前的版本租户库是 lamp_ds_c_base_{TenantId},4.10.0开始为了适配Oracle,变更为lamp_base_{TenantId},原因是:Oracle的库、表、字段等长度不能超过30字符。

    # mysql
    CREATE DATABASE IF NOT EXISTS `lamp_ds_c_defaults` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    CREATE DATABASE IF NOT EXISTS `lamp_base_1` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
    # oracle
    create user lamp_ds_c_defaults identified by lamp_ds_c_defaults;
    create user lamp_base_1 identified by lamp_base_1;
    grant create session,create table,create sequence,create view,resource to lamp_ds_c_defaults;
    grant create session,create table,create sequence,create view,resource to lamp_base_1;
    
    # SQL Server
    CREATE DATABASE lamp_ds_c_defaults COLLATE Chinese_PRC_CI_AS;
    CREATE DATABASE lamp_base_1 COLLATE Chinese_PRC_CI_AS;
    
  2. 导入sql脚本open in new window

  3. lamp-cloud-pro-datasource-column项目,需要确保 ContextConstants.TENANT_BASE_POOL_NAME_HEADERopen in new windowlamp_base库的前缀一致。

    public final class ContextConstants {
        // "lamp_base" 一定要和 创建base库(CREATE DATABASE lamp_base_1)时 的前缀一致 
        public static final String TENANT_BASE_POOL_NAME_HEADER = "lamp_base";
    }
    
  4. 参考 将配置文件导入Nacos , 将所有配置导入 nacos 对应的 命名空间 中,并在nacos的配置列表修改mysql、redis、rabbitmq等信息 (ip、端口、密码等)。

    提示

    密码是纯数字、含有特殊字符、没有密码的, 必须加上单引号。 如:

    • 你的密码是:00000,必须写成:'00000'
    • 没有密码必须写成:''
  5. 修改 nacos 中的 mysql.ymlopen in new window 配置文件

    根据您使用的数据库类型,修改1-3处内容,没有贴出来的参数保持默认值

    • lamp-cloud-pro-datasource-column

      mysql.yml 配置文件内容:

      lamp: 
        druid-oracle: &druid-oracle
          validation-query: SELECT 'x' FROM DUAL
        druid-mysql: &druid-mysql
          validation-query: SELECT 'x'
        druid-sqlserver: &druid-sqlserver
          validation-query: SELECT 'x'
      
        # 修改1:数据库连接基本信息, 三选一!!!不需要同时需要三种数据库!!!
        oracle: &db-oracle
          driverClassName: oracle.jdbc.driver.OracleDriver
          username: 'lamp_ds_c_defaults'
          password: 'lamp_ds_c_defaults'
          url: jdbc:oracle:thin:@172.26.3.67:1521:helowin
        mysql: &db-mysql
          driverClassName: com.mysql.cj.jdbc.Driver
          username: 'root'
          password: 'root'
          url: jdbc:mysql://127.0.0.1:3306/lamp_ds_c_defaults?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true    
        sqlserver: &db-sqlserver
          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
          username: 'sa'
          password: '1234@abcd'
          url: jdbc:sqlserver://172.26.3.67:1433;DatabaseName=lamp_ds_c_defaults
          init: 
            separator: GO
      
      spring:
        datasource:
          dynamic:
            druid:
              # 修改2:druid 信息
              <<: *druid-mysql
              #<<: *db-sqlserver   # sql server 使用我
              #<<: *db-oracle      # oracle使用我
            datasource:
              # 修改3: lamp_defaults数据源 锚点链接
              "0":    
                <<: *db-mysql        # mysql 使用我
                #<<: *db-sqlserver   # sql server 使用我
                #<<: *db-oracle      # oracle使用我
      








       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       





       
       
       
       
       
       
       
       
       
       

      修改后的配置如下:

      lamp: 
        druid-mysql: &druid-mysql
          validation-query: SELECT 'x' 
        mysql: &db-mysql
          driverClassName: com.mysql.cj.jdbc.Driver
          username: 'root'
          password: 'root'
          url: jdbc:mysql://127.0.0.1:3306/lamp_ds_c_defaults?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true    
        database: 
          dbType: MYSQL  # 可选项: MYSQL SQL_SERVER ORACLE
      
      spring:
        datasource:
          dynamic:
            druid:
              <<: *druid-mysql        
            datasource:
              "0":    
                <<: *db-mysql        # mysql 使用我
      
    • lamp-cloud-pro-column

      mysql.yml 配置文件内容:

         lamp: 
           # 修改1:数据库连接基本信息, 三选一!!!三选一!!!不是同时需要三种数据库!!!
           oracle: &db-oracle
             db-type: oracle     
             validation-query: SELECT 'x' FROM DUAL   
             filters: stat,wall,slf4j       # druid不支持使用p6spy打印日志,所以采用druid 的 slf4j 过滤器来打印可执行日志
             username: 'lamp_column'
             password: 'lamp_column'
             driverClassName: oracle.jdbc.driver.OracleDriver
             url: jdbc:oracle:thin:@172.26.3.67:1521:helowin
           mysql: &db-mysql
             db-type: mysql   
             validation-query: SELECT 'x'  
             filters: stat,wall
             username: 'root'
             password: 'root'
             # 生产使用原生驱动,开发使用p6spy驱动打印日志
             # driverClassName: com.mysql.cj.jdbc.Driver
             # url: jdbc:mysql://127.0.0.1:3306/lamp_column?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true  
             driverClassName: com.p6spy.engine.spy.P6SpyDriver
             url: jdbc:p6spy:mysql://127.0.0.1:3306/lamp_column?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true
           sqlserver: &db-sqlserver
             username: 'sa'
             password: '1234@abcd'
             driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
             url: jdbc:sqlserver://172.26.3.67:1433;DatabaseName=lamp_column
             #driverClassName: com.p6spy.engine.spy.P6SpyDriver
             # url: jdbc:p6spy:sqlserver://172.26.3.67:1433;DatabaseName=lamp_column
             db-type: sqlserver    
             validation-query: SELECT 'x'   
             filters: stat,wall
           database:  
             multiTenantType: COLUMN
             tenantIdColumn: 'tenant_id'
         
         spring:
           datasource:
             # 修改2:druid 信息
             druid:
               <<: *db-mysql
      


       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       




       
       

      修改后的配置如下:

      lamp: 
        mysql: &db-mysql
          db-type: mysql   
          validation-query: SELECT 'x'  
          filters: stat,wall
          username: 'root'
          password: 'root'
          # 生产使用原生驱动
          # driverClassName: com.mysql.cj.jdbc.Driver
          # url: jdbc:mysql://127.0.0.1:3306/lamp_column?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true  
          # 开发使用p6spy驱动打印 可执行 SQL
          driverClassName: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:mysql://127.0.0.1:3306/lamp_column?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true
      
      spring:
        datasource:
          druid:
            <<: *db-mysql
      
    • lamp-cloud-pro-none

      mysql.yml 配置文件内容:

      lamp: 
        oracle: &db-oracle
          db-type: oracle  
          validation-query: SELECT 'x' FROM DUAL   
          filters: stat,wall    # druid不支持使用p6spy打印日志,所以采用druid 的 slf4j 过滤器来打印可执行日志
          username: 'lamp_none'
          password: 'lamp_none'
          driverClassName: oracle.jdbc.driver.OracleDriver
          url: jdbc:oracle:thin:@172.26.3.67:1521:helowin
        mysql: &db-mysql
          filters: stat,wall
          db-type: mysql   
          validation-query: SELECT 'x'  
          username: 'root'
          password: 'root'
          # 生产使用原生驱动
          # driverClassName: com.mysql.cj.jdbc.Driver
          # url: jdbc:mysql://127.0.0.1:3306/lamp_none?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true  
          # 开发使用p6spy驱动打印日志
          driverClassName: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:mysql://127.0.0.1:3306/lamp_none?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true
        sqlserver: &db-sqlserver
          username: 'sa'
          password: '1234@abcd'
          # 生产使用原生驱动
          # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
          # url: jdbc:sqlserver://172.26.3.67:1433;DatabaseName=lamp_none
          # 开发使用p6spy驱动打印日志
          driverClassName: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:sqlserver://172.26.3.67:1433;DatabaseName=lamp_none
          db-type: sqlserver    
          validation-query: SELECT 'x'  
          filters: stat,wall
        database:  
          multiTenantType: NONE
          
      spring:
        datasource:
          druid:
            enable: true
            <<: *db-mysql
            # <<: *db-sqlserver
            # <<: *db-oracle    
      

       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       





       
       
       

      修改后的配置如下:

      lamp: 
        mysql: &db-mysql
          filters: stat,wall
          db-type: mysql   
          validation-query: SELECT 'x'  
          username: 'root'
          password: 'root'
          # 生产使用原生驱动
          # driverClassName: com.mysql.cj.jdbc.Driver
          # url: jdbc:mysql://127.0.0.1:3306/lamp_none?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true  
          # 开发使用p6spy驱动打印日志
          driverClassName: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:mysql://127.0.0.1:3306/lamp_none?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&nullCatalogMeansCurrent=true
      
      spring:
        datasource:
          druid:
            enable: true
            <<: *db-mysql    
      
  6. 修改数据库驱动

    根据使用的数据库,修改lamp-public/lamp-database-mode/pom.xmlopen in new window中的驱动依赖

    <!-- mysql 驱动 -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
    </dependency>
    
  7. 修改常量类 Conditionopen in new window

    public class Condition {
    
        /** MySQL、SQLServer 数据库的 模糊查询 */
        public static final String LIKE = SqlCondition.LIKE;
    //    /**  ORACLE 数据库的 模糊查询 */
    //    public static final String LIKE = SqlCondition.ORACLE_LIKE;
    }
    
  8. 修改 src/main/filters/config-dev.propertiesopen in new window 文件的的配置

    • nacos.xx : nacos相关参数

      强烈建议namespace跟我的保持一致,减少出错概率!

    • seata.xx: seata 相关参数

    • logging.file.path: 项目的日志文件存放路径

    • database.type: 数据库类型

    # ip 可以配置成自定义域名,并在hosts文件配置映射,解决切换网络时nacos不可用的bug
    nacos.ip=127.0.0.1
    nacos.port=8848
    nacos.namespace=b16f7baf-56e7-4f4e-a26c-425ee0668016
    nacos.username=nacos
    nacos.password=nacos
    nacos.seata.namespace=3cca7d98-3b1c-44d3-90e5-86abaaf0048a
    
    # seata 的 grouplist ip 端口
    seata.ip=127.0.0.1
    seata.port=8091
    
    # 日志存放位置 
    # 生成环境,建议修改为绝对路径
    logging.file.path=./logs
    sentinel.dashboard=127.0.0.1:8088
    
    # 数据库类型 mysql.yml oracle.yml sqlserver.yml
    database.type=mysql.yml
    














     




  9. 在电脑上创建日志存放路径,路径地址为 src/main/filters/config-dev.propertiesopen in new window 中的 logging.file.path

    mac 系统和linux系统,需要手动创建 /data/projects/logs 目录或者将logging.file.path参数修改为已存在且有写入权限的路径。

    某些mac系统是无法在跟路径创建/data目录的,可以自己修改成其他目录。

    # mac系统创建目录并授权:
    mkdir -p /data/projects/logs/
    chown -R ${USER}:wheel /data/projects/logs
    
  10. 编译项目, 参考 项目导入 将 lamp-cloud-pro-xxx 和 lamp-util-pro 同时导入到一个IDEA工作空间, 然后使用 maven 编译项目

  11. 编译成功后,验证所有服务的 lamp-cloud-pro-xxx/lamp-*/lamp-*-server/target/classes/bootstrap.yml 文件中,@nacos.*@ 是否成功替换为 config-dev.propertiesopen in new window 中的内容.

启动项目

  1. 先确保nacosMySQLRedisSeataRabbitMQ(可选)、等基础服务是否启动成功
  2. 逐一启动 OauthServerApplication、SystemServerApplication、BaseServerApplication、GatewayServerApplication、MonitorApplication

验证是否启动成功

  1. 打开 nacos控制台open in new window 若看到下图,则说明服务注册成功

  2. 或者打开项目控制台,看到打印的如图信息说明启动成功。

  3. 通过以下地址访问Swagger文档

    • 认证服务文档:http://127.0.0.1:18773/doc.html
    • 系统服务文档:http://127.0.0.1:18771/doc.html
    • 基础服务文档:http://127.0.0.1:18764/doc.html
    • SpringBootAdmin监控:http://127.0.0.1:18762/lamp-monitor
    • gateway网关聚合文档:http://127.0.0.1:18760/api/doc.html

常见问题

  1. Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

    答: 了解详情open in new window

  2. yml配置中${NACOS_IP:@nacos.ip@} 是什么意思

    答: 了解详情open in new window

  3. 怎么将lamp-cloud和lamp-util等任意两个java maven管理的项目同时导入一个IDEA的工作空间?

答:了解详情open in new window

  1. org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1

    答:了解详情open in new window

👆🏻👆🏻👆🏻上面是评论区,对系统、本页文档什么疑问,可以在评论区留言。
❗️❗️❗️若评论区无法显示,请使用"手机热点"或"科学上网"。