@llryiop/avatar-boot-cli 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/exam-question-generate-api.md +163 -0
- package/package.json +1 -1
- package/src/prompts.js +3 -3
- package/src/transform.js +1 -1
- package/templates/.claude/skills/avatar-boot-starter-feign/README.md +243 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +47 -219
- package/templates/.claude/skills/avatar-boot-starter-feign/references//345/212/237/350/203/275/350/257/246/350/247/243.md +65 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +75 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/references//351/205/215/347/275/256/345/217/202/350/200/203.md +70 -0
- package/templates/.claude/skills/avatar-boot-starter-job/README.md +437 -0
- package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +35 -414
- package/templates/.claude/skills/avatar-boot-starter-job/references//345/270/270/350/247/201/351/227/256/351/242/230.md +55 -0
- package/templates/.claude/skills/avatar-boot-starter-job/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +124 -0
- package/templates/.claude/skills/avatar-boot-starter-job/references//347/233/221/346/216/247/346/214/207/346/240/207.md +72 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/README.md +580 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +36 -560
- package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/234/200/344/275/263/345/256/236/350/267/265.md +43 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/240/270/345/277/203/345/212/237/350/203/275.md +117 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/references//351/205/215/347/275/256/345/217/202/350/200/203.md +54 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/README.md +572 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +40 -550
- package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/256/236/344/275/223/344/270/216/345/212/237/350/203/275.md +96 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/346/225/260/346/215/256/346/272/220.md +91 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/references//351/253/230/347/272/247/347/211/271/346/200/247/344/270/216/351/205/215/347/275/256.md +59 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/README.md +901 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +40 -879
- package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/212/237/350/203/275/344/275/277/347/224/250.md +134 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +96 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/references//346/225/205/351/232/234/346/216/222/346/237/245.md +64 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/README.md +594 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +52 -570
- package/templates/.claude/skills/avatar-boot-starter-oss/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +77 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/references//346/240/270/345/277/203/345/212/237/350/203/275.md +94 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/references//350/247/204/350/214/203/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +61 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/README.md +586 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +42 -566
- package/templates/.claude/skills/avatar-boot-starter-redis/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +78 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/references//346/225/260/346/215/256/346/223/215/344/275/234.md +111 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/references//351/253/230/347/272/247/345/212/237/350/203/275.md +90 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/README.md +662 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +48 -640
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//346/240/270/345/277/203/345/212/237/350/203/275.md +101 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/205/215/347/275/256/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +44 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/253/230/347/272/247/347/211/271/346/200/247.md +71 -0
- package/templates/.claude/skills/avatar-boot-starter-web/README.md +1007 -0
- package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +150 -1003
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-LogInfo/346/263/250/350/247/243.md +75 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/345/205/250/345/261/200/345/274/202/345/270/270/345/244/204/347/220/206.md +90 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/214/207/346/240/207/347/233/221/346/216/247.md +74 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/227/245/345/277/227/344/275/223/347/263/273.md +73 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/350/257/267/346/261/202/344/270/212/344/270/213/346/226/207.md +77 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +52 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//346/263/250/346/204/217/344/272/213/351/241/271.md +68 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//350/207/252/345/256/232/344/271/211/346/211/251/345/261/225/346/214/207/345/215/227.md +107 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//351/205/215/347/275/256/345/217/202/350/200/203.md +107 -0
- package/templates/.claude/skills/crud-generator/SKILL.md +133 -64
- package/templates/.claude/skills/database-design/README.md +207 -0
- package/templates/.claude/skills/database-design/SKILL.md +469 -82
- package/templates/.claude/skills/database-design/references//345/221/275/345/220/215/350/247/204/350/214/203.md +232 -0
- package/templates/.claude/skills/database-design/references//345/255/227/346/256/265/347/261/273/345/236/213/350/247/204/350/214/203.md +400 -0
- package/templates/.claude/skills/database-design/references//347/264/242/345/274/225/350/247/204/350/214/203.md +506 -0
- package/templates/README.md +65 -100
- package/templates/avatar-scaffold-api/pom.xml +0 -5
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/api/LoginFeignClient.java +2 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/exception/LoginErrorCode.java +25 -0
- package/templates/avatar-scaffold-service/pom.xml +25 -87
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/feign/DemoFeign.java +4 -1
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/UserLoginRepository.java +10 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/mapper/UserLoginMapper.java +4 -1
- package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +3 -5
- package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +21 -21
- package/templates/pom.xml +9 -18
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Nacos 功能使用
|
|
2
|
+
|
|
3
|
+
## 服务注册与发现
|
|
4
|
+
|
|
5
|
+
服务启动后自动注册到 Nacos,无需额外代码。
|
|
6
|
+
|
|
7
|
+
### 使用 @LoadBalanced 调用其他服务
|
|
8
|
+
|
|
9
|
+
```java
|
|
10
|
+
@Configuration
|
|
11
|
+
public class RestTemplateConfig {
|
|
12
|
+
@Bean
|
|
13
|
+
@LoadBalanced
|
|
14
|
+
public RestTemplate restTemplate() {
|
|
15
|
+
return new RestTemplate();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@Service
|
|
20
|
+
public class UserService {
|
|
21
|
+
@Autowired
|
|
22
|
+
private RestTemplate restTemplate;
|
|
23
|
+
|
|
24
|
+
public User getUser(Long id) {
|
|
25
|
+
// 直接使用服务名,负载均衡自动路由
|
|
26
|
+
return restTemplate.getForObject("http://user-service/users/" + id, User.class);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 服务发现配置
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
spring:
|
|
35
|
+
cloud:
|
|
36
|
+
nacos:
|
|
37
|
+
discovery:
|
|
38
|
+
enabled: true
|
|
39
|
+
register-enabled: true
|
|
40
|
+
ephemeral: true # 临时实例(推荐,容器化场景)
|
|
41
|
+
group: DEFAULT_GROUP
|
|
42
|
+
weight: 1.0
|
|
43
|
+
metadata:
|
|
44
|
+
version: 1.0.0
|
|
45
|
+
environment: ${spring.profiles.active}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 动态配置管理
|
|
49
|
+
|
|
50
|
+
### 方式一:@Value + @RefreshScope(热更新)
|
|
51
|
+
|
|
52
|
+
```java
|
|
53
|
+
@RestController
|
|
54
|
+
@RefreshScope // 必须加此注解才能热更新
|
|
55
|
+
public class ConfigController {
|
|
56
|
+
|
|
57
|
+
@Value("${app.feature.enabled:false}")
|
|
58
|
+
private boolean featureEnabled;
|
|
59
|
+
|
|
60
|
+
@GetMapping("/config")
|
|
61
|
+
public String getConfig() {
|
|
62
|
+
return "Feature enabled: " + featureEnabled;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 方式二:@ConfigurationProperties + @RefreshScope
|
|
68
|
+
|
|
69
|
+
```java
|
|
70
|
+
@Component
|
|
71
|
+
@ConfigurationProperties(prefix = "app")
|
|
72
|
+
@RefreshScope
|
|
73
|
+
@Data
|
|
74
|
+
public class AppConfig {
|
|
75
|
+
private String name;
|
|
76
|
+
private Feature feature;
|
|
77
|
+
|
|
78
|
+
@Data
|
|
79
|
+
public static class Feature {
|
|
80
|
+
private boolean enabled;
|
|
81
|
+
private int maxUsers;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
在 Nacos 控制台创建配置:
|
|
87
|
+
- **Data ID**:`my-service.yaml`
|
|
88
|
+
- **Group**:`DEFAULT_GROUP`
|
|
89
|
+
- **内容**:
|
|
90
|
+
```yaml
|
|
91
|
+
app:
|
|
92
|
+
name: My Service
|
|
93
|
+
feature:
|
|
94
|
+
enabled: true
|
|
95
|
+
maxUsers: 100
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 监听配置变更事件
|
|
99
|
+
|
|
100
|
+
```java
|
|
101
|
+
@Component
|
|
102
|
+
public class ConfigChangeListener {
|
|
103
|
+
|
|
104
|
+
@EventListener
|
|
105
|
+
public void onRefresh(RefreshScopeRefreshedEvent event) {
|
|
106
|
+
log.info("配置已刷新");
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@EventListener
|
|
110
|
+
public void onEnvironmentChange(EnvironmentChangeEvent event) {
|
|
111
|
+
log.info("配置变更的 key: {}", event.getKeys());
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 多环境隔离
|
|
117
|
+
|
|
118
|
+
推荐使用 **namespace** 隔离环境,**group** 隔离业务:
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
# 开发环境
|
|
122
|
+
spring:
|
|
123
|
+
cloud:
|
|
124
|
+
nacos:
|
|
125
|
+
namespace: dev-namespace-id
|
|
126
|
+
discovery:
|
|
127
|
+
group: DEFAULT_GROUP
|
|
128
|
+
|
|
129
|
+
# 生产环境
|
|
130
|
+
spring:
|
|
131
|
+
cloud:
|
|
132
|
+
nacos:
|
|
133
|
+
namespace: prod-namespace-id
|
|
134
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Nacos 快速接入与配置
|
|
2
|
+
|
|
3
|
+
## 1. 添加依赖
|
|
4
|
+
|
|
5
|
+
```xml
|
|
6
|
+
<dependency>
|
|
7
|
+
<groupId>com.iflytek.avatar.boot</groupId>
|
|
8
|
+
<artifactId>avatar-boot-starter-nacos</artifactId>
|
|
9
|
+
</dependency>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 2. 配置(必须使用 spring.config.import)
|
|
13
|
+
|
|
14
|
+
> ⚠️ **Spring Cloud Alibaba 2023.x 强制要求**,缺少此配置会导致启动失败。
|
|
15
|
+
|
|
16
|
+
**application.yaml**(主配置,定义服务名):
|
|
17
|
+
```yaml
|
|
18
|
+
spring:
|
|
19
|
+
application:
|
|
20
|
+
name: my-service
|
|
21
|
+
|
|
22
|
+
server:
|
|
23
|
+
port: 8080
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**application-dev.yml**(环境配置,声明 Nacos 配置导入):
|
|
27
|
+
```yaml
|
|
28
|
+
spring:
|
|
29
|
+
config:
|
|
30
|
+
import:
|
|
31
|
+
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
32
|
+
|
|
33
|
+
cloud:
|
|
34
|
+
nacos:
|
|
35
|
+
server-addr: 127.0.0.1:8848
|
|
36
|
+
namespace: dev
|
|
37
|
+
username: ${NACOS_USERNAME:nacos}
|
|
38
|
+
password: ${NACOS_PASSWORD:nacos}
|
|
39
|
+
config:
|
|
40
|
+
enabled: true
|
|
41
|
+
file-extension: yaml
|
|
42
|
+
group: DEFAULT_GROUP
|
|
43
|
+
discovery:
|
|
44
|
+
enabled: true
|
|
45
|
+
register-enabled: true
|
|
46
|
+
ephemeral: true
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 3. spring.config.import 格式说明
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
optional:nacos:{dataId}?group={group}&refreshEnabled=true
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
| 部分 | 说明 |
|
|
56
|
+
|:--|:--|
|
|
57
|
+
| `optional:` | 配置不存在时不报错(**推荐加上**) |
|
|
58
|
+
| `nacos:` | 指定配置源类型 |
|
|
59
|
+
| `{dataId}` | 配置文件的 Data ID |
|
|
60
|
+
| `?group=XXX` | 指定配置分组 |
|
|
61
|
+
| `&refreshEnabled=true` | 启用配置自动刷新 |
|
|
62
|
+
|
|
63
|
+
## 4. 常见错误
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
# ❌ 错误:缺少 spring.config.import
|
|
67
|
+
spring:
|
|
68
|
+
cloud:
|
|
69
|
+
nacos:
|
|
70
|
+
config:
|
|
71
|
+
enabled: true # 仅此配置会启动报错
|
|
72
|
+
|
|
73
|
+
# ❌ 错误:import 写在 cloud.nacos 下面(应在顶层 spring 下)
|
|
74
|
+
spring:
|
|
75
|
+
cloud:
|
|
76
|
+
nacos:
|
|
77
|
+
config:
|
|
78
|
+
import: ... # 错误位置
|
|
79
|
+
|
|
80
|
+
# ✅ 正确:import 在顶层 spring 下
|
|
81
|
+
spring:
|
|
82
|
+
config:
|
|
83
|
+
import:
|
|
84
|
+
- optional:nacos:my-service.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 5. 共享配置
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
spring:
|
|
91
|
+
config:
|
|
92
|
+
import:
|
|
93
|
+
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
94
|
+
- optional:nacos:common-database.yaml?group=SHARED_GROUP&refreshEnabled=true
|
|
95
|
+
- optional:nacos:common-redis.yaml?group=SHARED_GROUP&refreshEnabled=true
|
|
96
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Nacos 故障排查
|
|
2
|
+
|
|
3
|
+
## 1. 服务注册失败
|
|
4
|
+
|
|
5
|
+
**问题**:应用启动后未在 Nacos 控制台看到服务
|
|
6
|
+
|
|
7
|
+
**排查步骤**:
|
|
8
|
+
1. 检查 `spring.cloud.nacos.server-addr` 是否正确
|
|
9
|
+
2. 检查网络连通性:`telnet nacos-server 8848`
|
|
10
|
+
3. 确认 `spring.cloud.nacos.discovery.register-enabled=true`
|
|
11
|
+
4. 开启 DEBUG 日志:`logging.level.com.alibaba.nacos=DEBUG`
|
|
12
|
+
|
|
13
|
+
## 2. 配置加载失败
|
|
14
|
+
|
|
15
|
+
**常见错误信息**:
|
|
16
|
+
- `No spring.config.import property has been defined`
|
|
17
|
+
- `dataId must be specified`
|
|
18
|
+
- `illegal URI`
|
|
19
|
+
|
|
20
|
+
**排查清单**:
|
|
21
|
+
- ✅ 确认已在 `application-{profile}.yml` 中添加 `spring.config.import`
|
|
22
|
+
- ✅ 确认 `spring.config.import` 在**顶层 `spring:`** 下,不是在 `spring.cloud.nacos:` 下
|
|
23
|
+
- ✅ 确认 dataId 格式正确:`optional:nacos:{dataId}?group={group}&refreshEnabled=true`
|
|
24
|
+
- ✅ 确认 `spring.application.name` 在**主配置文件 application.yaml** 中定义
|
|
25
|
+
- ✅ 确认 Nacos 控制台中该 Data ID 存在(或使用 `optional:` 前缀允许不存在)
|
|
26
|
+
- ✅ 确认 namespace 配置正确
|
|
27
|
+
|
|
28
|
+
**正确配置示例**:
|
|
29
|
+
```yaml
|
|
30
|
+
# application.yaml
|
|
31
|
+
spring:
|
|
32
|
+
application:
|
|
33
|
+
name: my-service # 必须在主配置中定义
|
|
34
|
+
|
|
35
|
+
# application-dev.yml
|
|
36
|
+
spring:
|
|
37
|
+
config:
|
|
38
|
+
import:
|
|
39
|
+
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
40
|
+
cloud:
|
|
41
|
+
nacos:
|
|
42
|
+
server-addr: 127.0.0.1:8848
|
|
43
|
+
config:
|
|
44
|
+
enabled: true
|
|
45
|
+
file-extension: yaml
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 3. 配置不刷新
|
|
49
|
+
|
|
50
|
+
**问题**:修改 Nacos 配置后应用未更新
|
|
51
|
+
|
|
52
|
+
**排查步骤**:
|
|
53
|
+
1. 确认 `spring.cloud.nacos.config.refresh-enabled=true`(或 `refreshEnabled=true` 在 import 中)
|
|
54
|
+
2. 确认使用 `@RefreshScope` 的 Bean 没有被其他 Bean 缓存引用
|
|
55
|
+
3. 检查日志是否有 `Refresh keys changed`
|
|
56
|
+
4. 某些配置(如数据库连接池)不支持热更新,需要重启应用
|
|
57
|
+
|
|
58
|
+
## 4. 服务调用失败(使用服务名调用)
|
|
59
|
+
|
|
60
|
+
**排查步骤**:
|
|
61
|
+
1. 确认目标服务已注册到 Nacos(在服务列表中可见)
|
|
62
|
+
2. 确认 RestTemplate 有 `@LoadBalanced` 注解
|
|
63
|
+
3. 确认服务名大小写完全一致
|
|
64
|
+
4. 检查目标服务的 namespace 和 group 是否与调用方一致
|