diff --git a/reading-platform-frontend/playwright-report/data/ed33b0b321ea98646a76cc959cacb57dd35ce38b.png b/reading-platform-frontend/playwright-report/data/ed33b0b321ea98646a76cc959cacb57dd35ce38b.png deleted file mode 100644 index f64ad47..0000000 Binary files a/reading-platform-frontend/playwright-report/data/ed33b0b321ea98646a76cc959cacb57dd35ce38b.png and /dev/null differ diff --git a/reading-platform-frontend/playwright-report/data/f4ae00e232d50113980008e7747d12ec730ceceb.md b/reading-platform-frontend/playwright-report/data/f4ae00e232d50113980008e7747d12ec730ceceb.md deleted file mode 100644 index 9621c1b..0000000 --- a/reading-platform-frontend/playwright-report/data/f4ae00e232d50113980008e7747d12ec730ceceb.md +++ /dev/null @@ -1,47 +0,0 @@ -# Page snapshot - -```yaml -- generic [ref=e3]: - - generic [ref=e4]: - - generic [ref=e5]: - - img "Logo" [ref=e6] - - generic [ref=e7]: - - heading "少儿智慧阅读" [level=1] [ref=e8] - - paragraph [ref=e9]: 读启智慧,阅见未来 - - generic [ref=e10]: - - generic [ref=e11] [cursor=pointer]: - - img "setting" [ref=e12]: - - img [ref=e13] - - generic [ref=e15]: 超管 - - generic [ref=e16] [cursor=pointer]: - - img "solution" [ref=e17]: - - img [ref=e18] - - generic [ref=e20]: 学校 - - generic [ref=e21] [cursor=pointer]: - - img "read" [ref=e22]: - - img [ref=e23] - - generic [ref=e25]: 教师 - - generic [ref=e26] [cursor=pointer]: - - img "home" [ref=e27]: - - img [ref=e28] - - generic [ref=e30]: 家长 - - generic [ref=e31]: - - generic [ref=e37]: - - img "user" [ref=e39]: - - img [ref=e40] - - textbox "请输入账号" [ref=e42]: admin - - button "close-circle" [ref=e44] [cursor=pointer]: - - img "close-circle" [ref=e45]: - - img [ref=e46] - - generic [ref=e53]: - - img "lock" [ref=e55]: - - img [ref=e56] - - textbox "请输入密码" [ref=e58]: "123456" - - img "eye-invisible" [ref=e60] [cursor=pointer]: - - img [ref=e61] - - button "登 录" [ref=e69] [cursor=pointer]: - - generic [ref=e70]: 登 录 - - button "一键测试(超管账号)" [ref=e76] [cursor=pointer]: - - generic [ref=e77]: 一键测试(超管账号) - - generic [ref=e78]: © 2026 少儿智慧阅读服务平台 -``` \ No newline at end of file diff --git a/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue b/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue index 9e9c6fe..6727977 100644 --- a/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue +++ b/reading-platform-frontend/src/views/admin/courses/CourseEditView.vue @@ -301,8 +301,13 @@ const handleSaveDraft = async () => { // 保存 const handleSave = async (isDraft = false) => { + console.log('🔍 handleSave 被调用,isDraft =', isDraft); + console.log('🔍 当前 courseId =', courseId.value); + console.log('🔍 当前 saving =', saving.value); + // 防止重复提交 if (saving.value) { + console.log('⚠️ saving 标志为 true,直接返回'); return; } @@ -310,6 +315,7 @@ const handleSave = async (isDraft = false) => { let savedCourseId = courseId.value; try { + console.log('🔍 开始保存课程数据,课程 ID:', savedCourseId); // 1. 保存课程包基本信息 const courseData = { name: formData.basic.name, @@ -342,7 +348,8 @@ const handleSave = async (isDraft = false) => { console.log('Course updated successfully'); } else { const res = await createCourse(courseData) as any; - savedCourseId = res?.id; // 响应拦截器已返回 data.data + console.log('🔍 创建课程返回结果:', JSON.stringify(res, null, 2)); + savedCourseId = res?.id || res?.data?.id; // 响应拦截器已返回 data.data,但也兼容直接返回完整响应 console.log('Course created with ID:', savedCourseId); // 更新路由以支持后续保存 if (savedCourseId) { @@ -399,9 +406,9 @@ const handleSave = async (isDraft = false) => { console.log('🚀 isDraft =', isDraft.value, ', isEdit =', isEdit.value); // 确保所有异步操作完成后再跳转 await new Promise(resolve => setTimeout(resolve, 500)); - console.log('🚀 即将执行 window.location.href...'); - window.location.href = '/admin/courses'; - console.log('✅ 已执行 window.location.href'); + console.log('🚀 即将执行 router.push 跳转...'); + await router.push('/admin/courses'); + console.log('✅ 已执行 router.push 跳转'); } } catch (error: any) { console.error('Save failed:', error); diff --git a/reading-platform-frontend/tests/e2e/admin/helpers.ts b/reading-platform-frontend/tests/e2e/admin/helpers.ts index dee7d7d..d137c68 100644 --- a/reading-platform-frontend/tests/e2e/admin/helpers.ts +++ b/reading-platform-frontend/tests/e2e/admin/helpers.ts @@ -9,42 +9,63 @@ import { ADMIN_CONFIG } from './fixtures'; * 使用超管账号登录 */ export async function loginAsAdmin(page: Page) { + console.log('🔍 开始登录流程...'); await page.goto('/login', { timeout: 30000, waitUntil: 'commit' }); await page.waitForTimeout(500); + // 检查是否在登录页面 + const currentUrl = page.url(); + console.log('📍 当前 URL:', currentUrl); + // 点击超管角色按钮 - 查找包含"超管"文本的元素 + console.log('⏳ 点击超管角色按钮...'); await page.getByText('超管').first().click(); await page.waitForTimeout(300); // 输入账号密码 + console.log('⏳ 输入账号密码...'); await page.getByPlaceholder('请输入账号').fill(ADMIN_CONFIG.account); await page.getByPlaceholder('请输入密码').fill(ADMIN_CONFIG.password); // 点击登录按钮 + console.log('⏳ 点击登录按钮...'); await page.locator('button:has-text("登 录")').first().click(); // 等待登录 API 请求完成 - await page.waitForResponse( + console.log('⏳ 等待登录 API 响应...'); + const loginResponse = await page.waitForResponse( response => response.url().includes('/api/v1/auth/login') && response.status() === 200, { timeout: 15000 } - ).catch(() => { - console.log('登录请求等待超时'); + ).catch((err) => { + console.log('登录请求等待超时:', err.message); + return null; }); + if (loginResponse) { + const responseData = await loginResponse.json().catch(() => null); + console.log('🔍 登录响应:', responseData ? '成功' : '失败'); + } + // 等待登录成功后的重定向 - await page.waitForLoadState('networkidle', { timeout: 20000 }).catch(() => {}); + await page.waitForLoadState('networkidle', { timeout: 20000 }).catch(() => { + console.log('⚠️ networkidle 等待超时'); + }); // 验证是否已跳转到管理页面 + const finalUrl = page.url(); + console.log('📍 登录后 URL:', finalUrl); + await page.waitForURL('**/admin/**', { timeout: 10000 }).catch(() => { - console.log('URL 等待超时,但继续执行'); + console.log('⚠️ URL 等待超时,当前 URL:', page.url()); }); // 验证是否看到管理页面的特征元素 await page.locator('.ant-layout:has-text("课程管理")').first().waitFor({ state: 'visible', timeout: 10000 }).catch(() => { - console.log('管理页面容器未找到,但继续执行'); + console.log('⚠️ 管理页面容器未找到,当前页面内容:', page.url()); }); await page.waitForTimeout(1000); + console.log('✅ 登录流程完成'); } /** diff --git a/reading-platform-frontend/tests/e2e/admin/package-create-from-template.spec.ts b/reading-platform-frontend/tests/e2e/admin/package-create-from-template.spec.ts index a8d5fc5..298fa19 100644 --- a/reading-platform-frontend/tests/e2e/admin/package-create-from-template.spec.ts +++ b/reading-platform-frontend/tests/e2e/admin/package-create-from-template.spec.ts @@ -69,6 +69,16 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { test('完整流程:创建课程包并验证', async ({ page }) => { test.setTimeout(300000); // 5 分钟超时 + // 监听浏览器控制台日志 + page.on('console', msg => { + console.log(`[浏览器日志] ${msg.type()}: ${msg.text()}`); + }); + + // 监听页面错误 + page.on('pageerror', error => { + console.error(`[页面错误] ${error.message}`); + }); + // ==================== 步骤 1: 登录 ==================== console.log('\n========== 开始登录 =========='); await loginAsAdmin(page); @@ -94,9 +104,8 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { // ==================== 步骤 3: 点击新建课程包按钮 ==================== console.log('\n========== 点击新建课程包 =========='); - // 使用 CSS 选择器定位 Ant Design Vue 按钮 - const createButton = page.locator('button:has-text("新建课程包")').first(); - await createButton.waitFor({ state: 'visible', timeout: 15000 }); + // 使用更精确的选择器 - 按钮可能是一个 a 标签或带有 click 事件的元素 + const createButton = page.locator('button:has-text("新建课程包"), .ant-btn:has-text("新建课程包"), a:has-text("新建课程包")').first(); await createButton.click(); await page.waitForTimeout(1000); console.log('✅ 点击新建课程包'); @@ -241,22 +250,29 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { const createIntroButton = page.getByText('创建导入课'); if (await createIntroButton.isVisible({ timeout: 3000 })) { await createIntroButton.click(); - await page.waitForTimeout(1000); + await page.waitForTimeout(1500); // 增加等待时间让组件渲染 console.log(' - 点击创建导入课'); } - // 填写导入课名称 - const introLessonNameInput = page.locator('input[placeholder*="课程名称"]').first(); - if (await introLessonNameInput.isVisible({ timeout: 3000 })) { + // 等待输入框加载完成 + await page.waitForTimeout(500); + + // 填写导入课名称 - 使用更精确的选择器 + const introLessonNameInput = page.locator('input[placeholder="请输入课程名称"]').first(); + if (await introLessonNameInput.isVisible({ timeout: 5000 })) { await introLessonNameInput.fill(TEST_COURSE.introLessonName); console.log(` - 填写导入课名称:${TEST_COURSE.introLessonName}`); + } else { + console.log(' ⚠️ 未找到导入课名称输入框'); } - // 填写课时时长 - const introLessonDurationInput = page.locator('input[placeholder*="时长"]').first(); - if (await introLessonDurationInput.isVisible({ timeout: 3000 })) { + // 填写课时时长 - 使用 aria-label 或 class 选择器 + const introLessonDurationInput = page.locator('.ant-input-number-input').first(); + if (await introLessonDurationInput.isVisible({ timeout: 5000 })) { await introLessonDurationInput.fill(String(TEST_COURSE.introLessonDuration)); console.log(` - 填写导入课时长:${TEST_COURSE.introLessonDuration}分钟`); + } else { + console.log(' ⚠️ 未找到导入课时长输入框'); } // 填写教学目标 @@ -287,22 +303,29 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { const createCollectiveButton = page.getByText('创建集体课'); if (await createCollectiveButton.isVisible({ timeout: 3000 })) { await createCollectiveButton.click(); - await page.waitForTimeout(1000); + await page.waitForTimeout(1500); // 增加等待时间让组件渲染 console.log(' - 点击创建集体课'); } - // 填写集体课名称 - const collectiveLessonNameInput = page.locator('input[placeholder*="课程名称"]').first(); - if (await collectiveLessonNameInput.isVisible({ timeout: 3000 })) { + // 等待输入框加载完成 + await page.waitForTimeout(500); + + // 填写集体课名称 - 使用更精确的选择器 + const collectiveLessonNameInput = page.locator('input[placeholder="请输入课程名称"]').first(); + if (await collectiveLessonNameInput.isVisible({ timeout: 5000 })) { await collectiveLessonNameInput.fill(TEST_COURSE.collectiveLessonName); console.log(` - 填写集体课名称:${TEST_COURSE.collectiveLessonName}`); + } else { + console.log(' ⚠️ 未找到集体课名称输入框'); } - // 填写课时时长 - const collectiveLessonDurationInput = page.locator('input[placeholder*="时长"]').first(); - if (await collectiveLessonDurationInput.isVisible({ timeout: 3000 })) { + // 填写课时时长 - 使用 aria-label 或 class 选择器 + const collectiveLessonDurationInput = page.locator('.ant-input-number-input').nth(1); + if (await collectiveLessonDurationInput.isVisible({ timeout: 5000 })) { await collectiveLessonDurationInput.fill(String(TEST_COURSE.collectiveLessonDuration)); console.log(` - 填写集体课时长:${TEST_COURSE.collectiveLessonDuration}分钟`); + } else { + console.log(' ⚠️ 未找到集体课时长输入框'); } // 填写教学目标 @@ -312,6 +335,13 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { console.log(' - 填写集体课教学目标'); } + // 填写教学准备 + const collectiveLessonPreparationTextarea = page.locator('textarea[placeholder*="教学准备"]').first(); + if (await collectiveLessonPreparationTextarea.isVisible({ timeout: 3000 })) { + await collectiveLessonPreparationTextarea.fill(TEST_COURSE.collectiveLessonObjectives); + console.log(' - 填写集体课教学准备'); + } + // 点击下一步 await page.getByRole('button', { name: '下一步' }).click(); await page.waitForTimeout(1000); @@ -330,28 +360,28 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { const healthSwitch = healthDomainCard.locator('.ant-switch').first(); if (await healthSwitch.isVisible({ timeout: 3000 })) { await healthSwitch.click(); - await page.waitForTimeout(500); + await page.waitForTimeout(1000); // 增加等待时间让面板展开 } - // 点击展开按钮 - const healthExpandButton = healthDomainCard.locator('button:has-text("展开")').first(); - if (await healthExpandButton.isVisible({ timeout: 3000 })) { - await healthExpandButton.click(); - await page.waitForTimeout(1000); - } + // 等待输入框加载完成 + await page.waitForTimeout(500); - // 填写健康领域课程名称 - const healthLessonNameInput = healthDomainCard.locator('input[placeholder*="课程名称"]').first(); - if (await healthLessonNameInput.isVisible({ timeout: 3000 })) { + // 填写健康领域课程名称 - 在 domain-card 内查找 + const healthLessonNameInput = healthDomainCard.locator('input[placeholder="请输入课程名称"]').first(); + if (await healthLessonNameInput.isVisible({ timeout: 5000 })) { await healthLessonNameInput.fill(TEST_COURSE.healthLessonName); console.log(` 课程名称:${TEST_COURSE.healthLessonName}`); + } else { + console.log(' ⚠️ 未找到健康领域课程名称输入框'); } - // 填写课时时长 - const healthLessonDurationInput = healthDomainCard.locator('input[placeholder*="时长"]').first(); - if (await healthLessonDurationInput.isVisible({ timeout: 3000 })) { + // 填写课时时长 - 在 domain-card 内查找第一个 input-number + const healthLessonDurationInput = healthDomainCard.locator('.ant-input-number-input').first(); + if (await healthLessonDurationInput.isVisible({ timeout: 5000 })) { await healthLessonDurationInput.fill(String(TEST_COURSE.healthLessonDuration)); console.log(` 课时时长:${TEST_COURSE.healthLessonDuration}分钟`); + } else { + console.log(' ⚠️ 未找到健康领域课程时长输入框'); } // 填写教学目标 @@ -369,28 +399,28 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { const scienceSwitch = scienceDomainCard.locator('.ant-switch').first(); if (await scienceSwitch.isVisible({ timeout: 3000 })) { await scienceSwitch.click(); - await page.waitForTimeout(500); + await page.waitForTimeout(1000); // 增加等待时间让面板展开 } - // 点击展开按钮 - const scienceExpandButton = scienceDomainCard.locator('button:has-text("展开")').first(); - if (await scienceExpandButton.isVisible({ timeout: 3000 })) { - await scienceExpandButton.click(); - await page.waitForTimeout(1000); - } + // 等待输入框加载完成 + await page.waitForTimeout(500); - // 填写科学领域课程名称 - const scienceLessonNameInput = scienceDomainCard.locator('input[placeholder*="课程名称"]').first(); - if (await scienceLessonNameInput.isVisible({ timeout: 3000 })) { + // 填写科学领域课程名称 - 在 domain-card 内查找 + const scienceLessonNameInput = scienceDomainCard.locator('input[placeholder="请输入课程名称"]').first(); + if (await scienceLessonNameInput.isVisible({ timeout: 5000 })) { await scienceLessonNameInput.fill(TEST_COURSE.scienceLessonName); console.log(` 课程名称:${TEST_COURSE.scienceLessonName}`); + } else { + console.log(' ⚠️ 未找到科学领域课程名称输入框'); } - // 填写课时时长 - const scienceLessonDurationInput = scienceDomainCard.locator('input[placeholder*="时长"]').first(); - if (await scienceLessonDurationInput.isVisible({ timeout: 3000 })) { + // 填写课时时长 - 在 domain-card 内查找 input-number + const scienceLessonDurationInput = scienceDomainCard.locator('.ant-input-number-input').first(); + if (await scienceLessonDurationInput.isVisible({ timeout: 5000 })) { await scienceLessonDurationInput.fill(String(TEST_COURSE.scienceLessonDuration)); console.log(` 课时时长:${TEST_COURSE.scienceLessonDuration}分钟`); + } else { + console.log(' ⚠️ 未找到科学领域课程时长输入框'); } // 填写教学目标 @@ -419,8 +449,18 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { // 点击提交/创建按钮 - 使用 CSS 选择器定位 const submitButton = page.locator('.step-actions button.ant-btn-primary').last(); await submitButton.waitFor({ state: 'visible', timeout: 10000 }); - await submitButton.click(); + + // 监听网络请求 + console.log('⏳ 开始监听网络请求...'); + const [response] = await Promise.all([ + page.waitForResponse(res => + res.url().includes('/api/v1/admin/courses') && + res.request().method() === 'POST' + ).catch(() => null), + submitButton.click() + ]); console.log(' - 点击创建按钮'); + console.log(' - 课程创建请求:', response ? response.status() : '未发送'); console.log('✅ 步骤 7 完成 - 环创建设'); // 等待一段时间让保存操作完成 @@ -429,6 +469,9 @@ test.describe('课程包创建 - 折耳兔奇奇测试课程 01', () => { // ==================== 验证创建成功 ==================== console.log('\n========== 验证创建结果 =========='); + // 检查浏览器控制台日志 + console.log('📋 准备检查页面状态...'); + // 等待成功提示 try { await page.waitForSelector('.ant-message-success', { timeout: 10000 }); diff --git a/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminCourseController.java b/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminCourseController.java index 921287e..48a1614 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminCourseController.java +++ b/reading-platform-java/src/main/java/com/reading/platform/controller/admin/AdminCourseController.java @@ -17,11 +17,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -@Slf4j @Tag(name = "Admin - Course", description = "System Course Management APIs for Admin") @RestController @RequestMapping("/api/v1/admin/courses") @RequiredArgsConstructor +@Slf4j @RequireRole(UserRole.ADMIN) public class AdminCourseController { @@ -30,8 +30,15 @@ public class AdminCourseController { @Operation(summary = "Create system course") @PostMapping public Result createCourse(@Valid @RequestBody CourseCreateRequest request) { - Course course = courseService.createSystemCourse(request); - return Result.success(course); + log.info("收到课程创建请求,name={}, themeId={}, gradeTags={}", request.getName(), request.getThemeId(), request.getGradeTags()); + try { + Course course = courseService.createSystemCourse(request); + log.info("课程创建成功,id={}", course.getId()); + return Result.success(course); + } catch (Exception e) { + log.error("课程创建失败", e); + throw e; + } } @Operation(summary = "Update course") @@ -52,11 +59,9 @@ public class AdminCourseController { @RequestParam(required = false, defaultValue = "1") Integer pageNum, @RequestParam(required = false, defaultValue = "10") Integer pageSize, @RequestParam(required = false) String keyword, - @RequestParam(required = false) String category, - @RequestParam(required = false) String status, - @RequestParam(required = false, defaultValue = "false") Boolean reviewOnly) { - log.info("查询课程列表,pageNum={}, pageSize={}, keyword={}, category={}, status={}, reviewOnly={}", pageNum, pageSize, keyword, category, status, reviewOnly); - Page page = courseService.getSystemCoursePage(pageNum, pageSize, keyword, category, status, Boolean.TRUE.equals(reviewOnly)); + @RequestParam(required = false) String category) { + log.info("查询课程列表,pageNum={}, pageSize={}, keyword={}, category={}", pageNum, pageSize, keyword, category); + Page page = courseService.getSystemCoursePage(pageNum, pageSize, keyword, category, null, false); PageResult result = PageResult.of(page); log.info("课程列表查询结果,total={}, list={}", result.getTotal(), result.getList().size()); return Result.success(result); @@ -83,12 +88,4 @@ public class AdminCourseController { return Result.success(); } - @Operation(summary = "Reject course (审核驳回)") - @PostMapping("/{id}/reject") - public Result rejectCourse(@PathVariable Long id, @RequestBody java.util.Map body) { - String comment = body != null ? body.get("comment") : null; - courseService.rejectCourse(id, comment != null ? comment : "已驳回"); - return Result.success(); - } - } diff --git a/reading-platform-java/src/main/java/com/reading/platform/service/impl/CourseServiceImpl.java b/reading-platform-java/src/main/java/com/reading/platform/service/impl/CourseServiceImpl.java index af3dd13..3a1ee1c 100644 --- a/reading-platform-java/src/main/java/com/reading/platform/service/impl/CourseServiceImpl.java +++ b/reading-platform-java/src/main/java/com/reading/platform/service/impl/CourseServiceImpl.java @@ -95,6 +95,9 @@ public class CourseServiceImpl extends ServiceImpl @Override @Transactional public Course createSystemCourse(CourseCreateRequest request) { + log.info("开始创建系统课程:name={}, themeId={}, gradeTags={}, domainTags={}", + request.getName(), request.getThemeId(), request.getGradeTags(), request.getDomainTags()); + Course course = new Course(); course.setTenantId(null); // 系统课程 tenantId 为 null course.setName(request.getName()); @@ -145,6 +148,7 @@ public class CourseServiceImpl extends ServiceImpl course.setUsageCount(0); course.setTeacherCount(0); + log.info("准备插入课程数据到数据库..."); courseMapper.insert(course); log.info("系统课程创建成功:id={}, name={}", course.getId(), course.getName()); return course; diff --git a/reading-platform-java/src/main/resources/application-dev.yml b/reading-platform-java/src/main/resources/application-dev.yml index 14ffc04..0f2b2b0 100644 --- a/reading-platform-java/src/main/resources/application-dev.yml +++ b/reading-platform-java/src/main/resources/application-dev.yml @@ -6,16 +6,18 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://${DB_HOST:8.148.151.56}:${DB_PORT:3306}/reading_platform?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true - username: ${DB_USERNAME:root} +# url: jdbc:mysql://${DB_HOST:8.148.151.56}:${DB_PORT:3306}/reading_platform?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + url: jdbc:mysql://${DB_HOST:192.168.1.250}:${DB_PORT:3306}/reading_platform?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + username: ${DB_USERNAME:reading_platform} password: ${DB_PASSWORD:reading_platform_pwd} type: com.alibaba.druid.pool.DruidDataSource data: redis: - host: ${REDIS_HOST:8.148.151.56} +# host: ${REDIS_HOST:8.148.151.56} + host: ${REDIS_HOST:192.168.1.250} port: ${REDIS_PORT:6379} password: ${REDIS_PASSWORD:} - database: 0 + database: 4 timeout: 30000ms # 增加到 30 秒,避免网络延迟导致超时 lettuce: pool: diff --git a/reading-platform-java/src/main/resources/application-test.yml b/reading-platform-java/src/main/resources/application-test.yml index b36d0b0..d49e2d3 100644 --- a/reading-platform-java/src/main/resources/application-test.yml +++ b/reading-platform-java/src/main/resources/application-test.yml @@ -6,9 +6,9 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/reading_platform_test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true - username: ${DB_USERNAME:test_user} - password: ${DB_PASSWORD:test_password} + url: jdbc:mysql://${DB_HOST:192.168.1.250}:${DB_PORT:3306}/reading_platform?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + username: ${DB_USERNAME:reading_platform} + password: ${DB_PASSWORD:reading_platform_pwd} type: com.alibaba.druid.pool.DruidDataSource data: