Appearance
快速开始
技术栈:
- BladeX 4.0.1.RELEASE
- JDK 17
- JOOQ 3.19.8
- MYSQL
- Redis
- NACOS
- MAVEN >= 3.8.6
环境:
- JDK 17
- NACOS
- Redis
- MAVEN
1.导入NACOS以下文件
- 1.1 blade.yaml 基础配置
yaml
#服务器配置
server:
undertow:
threads:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io: 16
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker: 400
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
buffer-size: 1024
# 是否分配的直接内存
direct-buffers: true
#spring配置
spring:
cloud:
nacos:
discovery:
# 禁用云命名空间解析,防止和云平台环境变量冲突
isUseCloudNamespaceParsing: false
config:
# 禁用云命名空间解析,防止和云平台环境变量冲突
isUseCloudNamespaceParsing: false
sentinel:
eager: true
devtools:
restart:
log-condition-evaluation-delta: false
livereload:
port: 23333
#feign配置
feign:
sentinel:
enabled: true
okhttp:
enabled: true
httpclient:
enabled: false
#对外暴露端口
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
#knife4j配置
knife4j:
#启用
enable: true
#基础认证
basic:
enable: false
username: blade
password: blade
#增强配置
setting:
enableSwaggerModels: true
enableDocumentManage: true
enableHost: false
enableHostText: http://localhost
enableRequestCache: true
enableFilterMultipartApis: false
enableFilterMultipartApiMethodType: POST
language: zh_cn
enableFooter: false
enableFooterCustom: true
footerCustomContent: Copyright © 2023 BladeX All Rights Reserved
#swagger公共信息
swagger:
title: BladeX 接口文档系统
description: BladeX 接口文档系统
version: 4.0.1.RELEASE
license: Powered By BladeX
license-url: https://bladex.cn
terms-of-service-url: https://bladex.cn
contact:
name: 翼宿
email: bladejava@qq.com
url: https://gitee.com/smallc
#blade配置
blade:
#token配置
token:
#是否有状态
state: false
#是否单用户登录
single: false
#单用户登录范围
single-level: all
#token签名 使用blade-auth服务 @org.springblade.test.SignKeyGenerator 获取
sign-key: 7fABAXjQXuVHttC9QU7aXcz6AulpW4cp
#token加密 使用blade-auth服务 @org.springblade.test.CryptoKeyGenerator 获取
crypto-key: Fykm3bLron2BGRY2bF51E6cikTzH9AtE
#接口配置
api:
#报文加密配置
crypto:
#启用报文加密配置
enabled: false
#使用blade-auth服务 @org.springblade.test.CryptoKeyGenerator 获取,需和前端保持一致
aes-key: Fe7mQ8N0bOIbUG9OwlSGwJ6oejxPYfsW
#使用blade-auth服务 @org.springblade.test.CryptoKeyGenerator 获取,需和前端保持一致
des-key: fGPEuUg8e558dOW4
#jackson配置
jackson:
#null自动转空值
null-to-empty: true
#大数字自动转字符串
big-num-to-string: true
#支持text文本请求,与报文加密同时开启
support-text-plain: false
#redis序列化方式
redis:
serializer-type: protostuff
#日志配置
log:
request:
#开启控制台请求日志
enabled: true
#控制台请求日志忽略
skip-url:
- /blade-desk/notice/list
- /blade-chat/weixin/**
#开启错误日志入库
error-log: true
#xss配置
xss:
enabled: true
skip-url:
- /weixin
- /notice/submit
- /model/submit
- /datasource/submit
#安全框架配置
secure:
#严格模式
#缺失令牌字段则取消授权
strict-token: true
#缺失请求头则取消授权
strict-header: false
#接口放行
skip-url:
- /test/**
#授权认证配置
auth:
- method: ALL
pattern: /chat/wechat/**
expression: "hasAuth()"
- method: ALL
pattern: /chat/qq/**
expression: "hasStrictToken()"
- method: ALL
pattern: /chat/ding/**
expression: "hasStrictHeader()"
- method: POST
pattern: /dashboard/upload
expression: "hasTimeAuth(9, 17)"
- method: POST
pattern: /dashboard/submit
expression: "hasAnyRole('administrator', 'admin', 'user')"
#基础认证配置
basic:
- method: ALL
pattern: /dashboard/info
username: "blade"
password: "blade"
#动态签名认证配置
sign:
- method: ALL
pattern: /dashboard/sign
crypto: "sha1"
#多终端认证配置
client:
- client-id: sword
path-patterns:
- /sword/**
- client-id: saber
path-patterns:
- /saber/**
#多租户配置
tenant:
#多租户增强
enhance: true
#多租户授权保护
license: false
#动态数据源功能
dynamic-datasource: false
#动态数据源全局扫描
dynamic-global: false
#多租户字段名
column: tenant_id
#排除多租户逻辑
exclude-tables:
- blade_user
#分库分表配置
sharding:
enabled: false
- 1.2 blade-dev.yaml, 下面为开发环境yaml文件,请逐项修改为真实配置.如需配置测试或生产环境,请参照开发环境配置
yaml
#spring配置
spring:
data:
redis:
##redis 单机环境配置
host: 127.0.0.1
port: 6379
password: xxx
database: 0
ssl:
enabled: false
##redis 集群环境配置
#cluster:
# nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
# commandTimeout: 5000
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
#driver-class-name: org.postgresql.Driver
#driver-class-name: oracle.jdbc.OracleDriver
#driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#driver-class-name: dm.jdbc.driver.DmDriver
#driver-class-name: com.yashandb.jdbc.Driver
druid:
# MySql、PostgreSQL、SqlServer、DaMeng校验
validation-query: select 1
# Oracle、YashanDB校验
#oracle: true
#validation-query: select 1 from dual
#项目模块集中配置
blade:
#分布式锁配置
lock:
enabled: false
address: redis://127.0.0.1:6888
#多团队协作服务配置
loadbalancer:
#开启配置
enabled: true
#负载均衡优先调用的ip段
prior-ip-pattern:
- 192.168.0.*
- 127.0.0.1
#通用开发生产环境数据库地址(特殊情况可在对应的子工程里配置覆盖)
datasource:
dev:
# MySql
url: jdbc:mysql://127.0.0.1:3306/bladex_su_code?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: root
- 1.3 su-code-service-dev.yaml, 下面为开发环境su-code-service.yaml文件,请逐项修改为真实配置.如需配置测试或生产环境,请参照开发环境配置
yaml
#服务器配置
server:
undertow:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io-threads: 16
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker-threads: 400
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
buffer-size: 1024
# 是否分配的直接内存
direct-buffers: true
#spring配置
spring:
cloud:
sentinel:
eager: true
devtools:
restart:
log-condition-evaluation-delta: false
livereload:
port: 23333
redis:
host: 127.0.0.1
port: 6888
password:
database: 0
ssl: false
max-idle: 8
max-total: 32
max-wait-millis: 1000
test-on-borrow: true
datasource:
druid:
validation-query: select 1
dynamic:
hikari:
connection-timeout: 30000 # 30 秒
validation-timeout: 5000 # 5 秒
idle-timeout: 600000 # 10 分钟
max-lifetime: 1800000 # 30 分钟
max-pool-size: 200 # 最大连接池大小,视需求调整
min-idle: 10 # 最小空闲连接数
leak-detection-threshold: 2000 # 2 秒(根据实际情况调整)
kafka:
bootstrap-servers: 127.0.0.1:9092
#feign配置
feign:
sentinel:
enabled: true
okhttp:
enabled: true
httpclient:
enabled: false
#hystrix配置
hystrix:
threadpool:
default:
coreSize: 300
maxQueueSize: 1000
queueSizeRejectionThreshold: 800
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
#ribbon配置
ribbon:
#对当前实例的重试次数
MaxAutoRetries: 1
#切换实例的重试次数
MaxAutoRetriesNextServer: 2
#请求处理的超时时间
ReadTimeout: 60000
#请求连接的超时时间
ConnectTimeout: 60000
#对所有操作请求都进行重试
OkToRetryOnAllOperations: true
#对外暴露端口
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
#knife4j配置
knife4j:
#启用
enable: true
#基础认证
basic:
enable: false
username: blade
password: blade
#增强配置
setting:
enableSwaggerModels: true
enableDocumentManage: true
enableHost: false
enableHostText: http://localhost
enableRequestCache: true
enableFilterMultipartApis: false
enableFilterMultipartApiMethodType: POST
language: zh-CN
enableFooter: false
enableFooterCustom: true
footerCustomContent: Copyright © 2021 BladeX All Rights Reserved
#swagger公共信息
swagger:
title: xxxx
description: xxxx
version: 1.0.0.bate1
license: Powered By Suconnect
license-url: xxxx
terms-of-service-url: xxxxx
contact:
name: xxx
email: xxxx
url: xxxx
#blade配置
blade:
#token配置
token:
#是否有状态
state: false
#redis序列化方式
redis:
serializer-type: protostuff
#接口配置
api:
#报文加密配置
crypto:
#启用报文加密配置
enabled: false
#使用AesUtil.genAesKey()生成
aes-key: O2BEeIv399qHQNhD6aGW8R8DEj4bqHXm
#使用DesUtil.genDesKey()生成
des-key: jMVCBsFGDQr1USHo
#jackson配置
jackson:
#null自动转空值
null-to-empty: true
#大数字自动转字符串
big-num-to-string: true
#支持text文本请求,与报文加密同时开启
support-text-plain: false
#xss配置
xss:
enabled: true
skip-url:
- /model/web
- /model/web/
- /web
- /web/
- /history/**
#安全框架配置
secure:
#接口放行
skip-url:
- /test/**
#授权认证配置
auth:
- method: ALL
pattern: /weixin/**
expression: "hasAuth()"
- method: POST
pattern: /dashboard/upload
expression: "hasTimeAuth(9, 17)"
- method: POST
pattern: /dashboard/submit
expression: "hasAnyRole('administrator', 'admin', 'user')"
#基础认证配置
basic:
- method: ALL
pattern: /dashboard/info
username: "blade"
password: "blade"
#动态签名认证配置
sign:
- method: ALL
pattern: /dashboard/sign
crypto: "sha1"
#多终端认证配置
client:
- client-id: sword
path-patterns:
- /sword/**
- client-id: saber
path-patterns:
- /saber/**
#多租户配置
tenant:
#多租户增强
enhance: true
#多租户授权保护
license: false
#动态数据源功能
dynamic-datasource: false
#动态数据源全局扫描
dynamic-global: false
#多租户字段名
column: tenant_id
#排除多租户逻辑
exclude-tables:
- blade_user
lock:
enabled: false
address: redis://127.0.0.1:6379
ribbon:
rule:
enabled: true
prior-ip-pattern:
- 192.168.0.*
- 127.0.0.1
datasource:
dev:
url: jdbc:mysql://127.0.0.1:3306/bladex_su_code?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: root
xxl:
job:
user-name: admin
password: 123456
job-group: 2
service: xxlJobService
appname: znyd-dynamic-tag-service
access-token: su-blade-low-code
executor-ip:
admin:
host: http://127.0.0.1:7009/xxl-job-admin
addresses: http://127.0.0.1:7009/xxl-job-admin
su:
datasource:
type: mysql
pool-name: master
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/bladex_su_code?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: root
docking:
user-table-name: blade_user
user-data-source-name: master
dept-table-name: blade_dept
dept-data-source-name: master
2.MAVEN setting.xml配置
xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<localRepository>D:\software\apache-maven-3.8.6\repository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>jooq-pro</id>
<username>xxxxx@xxxxx</username>
<password>xxxx-xxxx-xxxx-xxxx-xxxx</password>
</server>
<server>
<id>bladex</id>
<configuration>
<httpHeaders>
<property>
<name>Authorization</name>
<value>token xxxxx</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
<mirrors>
<mirror>
<id>aliyun-mirror</id>
<mirrorOf>"*,!bladex,!evcharge"</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>
3.导入MYSQl脚本文件以下文件
- 文件路径: blade-su-code-service下src/main/resources/mysql
4.修改源码中环境变量
- 4.1 在blade-biz-common 服务下 org.springblade.common.constant.LauncherConstant类中,维护着nacos xxl-job等配置,系统启动依赖于这些.故需要把相关配置改成真实配置
java
package org.springblade.common.constant;
import org.springblade.core.launch.constant.AppConstant;
import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
/**
* 通用常量
*
* @author Chill
*/
public interface LauncherConstant {
/**
* nacos 用户名
*/
String NACOS_USERNAME = "nacos";
/**
* nacos 密码
*/
String NACOS_PASSWORD = "xxxxx";
/**
* xxljob
*/
String APPLICATION_XXLJOB_NAME = APPLICATION_NAME_PREFIX + "xxljob";
/**
* xxljob
*/
String APPLICATION_XXLJOB_ADMIN_NAME = APPLICATION_NAME_PREFIX + "xxljob-admin";
/**
* nacos namespace id
*/
String NACOS_NAMESPACE = "4d22b512-af10-48ce-817f-af2978ea97f1";
/**
* nacos dev 地址
*/
String NACOS_DEV_ADDR = "127.0.0.1:8848";
/**
* nacos prod 地址
*/
String NACOS_PROD_ADDR = "127.0.0.1:8848";
/**
* nacos test 地址
*/
String NACOS_TEST_ADDR = "127.0.0.1:8848";
/**
* sentinel dev 地址
*/
String SENTINEL_DEV_ADDR = "127.0.0.1:8858";
/**
* sentinel prod 地址
*/
String SENTINEL_PROD_ADDR = "172.30.0.58:8858";
/**
* sentinel test 地址
*/
String SENTINEL_TEST_ADDR = "172.30.0.58:8858";
/**
* seata dev 地址
*/
String SEATA_DEV_ADDR = "127.0.0.1:8091";
/**
* seata prod 地址
*/
String SEATA_PROD_ADDR = "172.30.0.68:8091";
/**
* seata test 地址
*/
String SEATA_TEST_ADDR = "172.30.0.68:8091";
/**
* dbuuo提供者
*/
String APPLICATION_DUBBO_PROVIDER_NAME = APPLICATION_NAME_PREFIX + "dubbo-provider";
/**
* dbuuo消费者
*/
String APPLICATION_DUBBO_CONSUMER_NAME = APPLICATION_NAME_PREFIX + "dubbo-consumer";
/**
* seata订单
*/
String APPLICATION_SEATA_ORDER_NAME = APPLICATION_NAME_PREFIX + "seata-order";
/**
* seata库存
*/
String APPLICATION_SEATA_STORAGE_NAME = APPLICATION_NAME_PREFIX + "seata-storage";
/**
* easypoi
*/
String APPLICATION_EASYPOI_NAME = APPLICATION_NAME_PREFIX + "easypoi";
/**
* kafka
*/
String APPLICATION_KAFKA_NAME = APPLICATION_NAME_PREFIX + "kafka";
/**
* rabbit
*/
String APPLICATION_RABBIT_NAME = APPLICATION_NAME_PREFIX + "rabbit";
/**
* stream消费者
*/
String APPLICATION_STREAM_CONSUMER_NAME = APPLICATION_NAME_PREFIX + "stream-consumer";
/**
* stream生产者
*/
String APPLICATION_STREAM_PROVIDER_NAME = APPLICATION_NAME_PREFIX + "stream-provider";
/**
* seata file模式
*/
String FILE_MODE = "file";
/**
* seata nacos模式
*/
String NACOS_MODE = "nacos";
/**
* seata default模式
*/
String DEFAULT_MODE = "default";
/**
* seata group后缀
*/
String GROUP_NAME = "-group";
/**
* seata 服务组格式
*
* @param appName 服务名
* @return group
*/
static String seataServiceGroup(String appName) {
return appName.concat(GROUP_NAME);
}
/**
* 动态获取nacos地址
*
* @param profile 环境变量
* @return addr
*/
static String nacosAddr(String profile) {
switch (profile) {
case (AppConstant.PROD_CODE):
return NACOS_PROD_ADDR;
case (AppConstant.TEST_CODE):
return NACOS_TEST_ADDR;
default:
return NACOS_DEV_ADDR;
}
}
/**
* 动态获取sentinel地址
*
* @param profile 环境变量
* @return addr
*/
static String sentinelAddr(String profile) {
switch (profile) {
case (AppConstant.PROD_CODE):
return SENTINEL_PROD_ADDR;
case (AppConstant.TEST_CODE):
return SENTINEL_TEST_ADDR;
default:
return SENTINEL_DEV_ADDR;
}
}
/**
* 动态获取seata地址
*
* @param profile 环境变量
* @return addr
*/
static String seataAddr(String profile) {
switch (profile) {
case (AppConstant.PROD_CODE):
return SEATA_PROD_ADDR;
case (AppConstant.TEST_CODE):
return SEATA_TEST_ADDR;
default:
return SEATA_DEV_ADDR;
}
}
}
- 4.2 blade-biz-common 服务下 org.springblade.common.launch.LauncherServiceImpl类,是系统启动配置的入口.需要结合实际确确认是否修改
java
package org.springblade.common.launch;
import org.springblade.common.constant.LauncherConstant;
import org.springblade.core.auto.service.AutoService;
import org.springblade.core.launch.service.LauncherService;
import org.springblade.core.launch.utils.PropsUtil;
import org.springframework.boot.builder.SpringApplicationBuilder;
import java.util.Properties;
/**
* 启动参数拓展
*
* @author smallchil
*/
@AutoService(LauncherService.class)
public class LauncherServiceImpl implements LauncherService {
@Override
public void launcher(SpringApplicationBuilder builder, String appName, String profile, boolean isLocalDev) {
Properties props = System.getProperties();
// 通用注册
PropsUtil.setProperty(props, "spring.cloud.nacos.username", LauncherConstant.NACOS_USERNAME);
PropsUtil.setProperty(props, "spring.cloud.nacos.password", LauncherConstant.NACOS_PASSWORD);
PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", LauncherConstant.NACOS_NAMESPACE);
PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", LauncherConstant.NACOS_NAMESPACE);
//PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
// seata注册地址
//PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));
// seata注册group格式
//PropsUtil.setProperty(props, "seata.tx-service-group", LauncherConstant.seataServiceGroup(appName));
// seata配置服务group
//PropsUtil.setProperty(props, "seata.service.vgroup-mapping.".concat(LauncherConstant.seataServiceGroup(appName)), LauncherConstant.DEFAULT_MODE);
// seata注册模式配置
// PropsUtil.setProperty(props, "seata.registry.type", LauncherConstant.NACOS_MODE);
// PropsUtil.setProperty(props, "seata.registry.nacos.server-addr", LauncherConstant.nacosAddr(profile));
// PropsUtil.setProperty(props, "seata.config.type", LauncherConstant.NACOS_MODE);
// PropsUtil.setProperty(props, "seata.config.nacos.server-addr", LauncherConstant.nacosAddr(profile));
}
}
5.启动服务
- 5.1 将bladex基础服务打成jar包,并启动
- 5.2 将blade-su-code-service服务打成jar包,并启动
blade-su-code-service 目录说明
├─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─su
│ │ └─code
│ │ │ SuCodeApplication.java 启动类
│ │ ├─common 工具包
│ │ │ ├─annotation 注解
│ │ │ ├─constant 常量
│ │ │ ├─enums 枚举
│ │ │ ├─exception 异常
│ │ │ ├─model 模型
│ │ │ └─util 工具
│ │ ├─config 配置
│ │ ├─controller 控制类
│ │ ├─datasource 数据源类
│ │ │ ├─aspect 切面
│ │ │ ├─config 配置
│ │ │ ├─constant 常量
│ │ │ ├─creator 数据源维护
│ │ │ ├─entity 对象
│ │ │ ├─manager 管理
│ │ │ │ └─impl 实现
│ │ │ ├─model 模型
│ │ │ ├─proxy 代理
│ │ │ └─service 服务
│ │ │ └─impl 实现类
│ │ ├─exception 异常
│ │ │ ├─config 配置
│ │ │ └─util 工具类
│ │ ├─linstener 监听
│ │ ├─model 模型
│ │ │ └─dto 业务对象
│ │ ├─persistence 数据层
│ │ │ ├─command 命令
│ │ │ │ └─parser 解析
│ │ │ ├─config 配置
│ │ │ ├─constant 常量
│ │ │ ├─dao 数据层
│ │ │ │ └─impl 实现层
│ │ │ ├─enums 枚举
│ │ │ ├─event 事件
│ │ │ ├─exception 异常
│ │ │ ├─model 模型
│ │ │ │ └─jooq jooq拓展
│ │ │ ├─result 数据返回封装层
│ │ │ ├─service 服务层
│ │ │ │ └─impl 实现层
│ │ │ └─util 工具层
│ │ └─service 业务服务层
│ │ └─impl 业务实现层