Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.springframework.stereotype.Service;

Expand All @@ -50,12 +51,13 @@
@Service
public class SysInitDefService {

private static final String ALONE_CONFIG = "alone.properties";
private static final String DEFAULT_ALONE_CONFIG = "default_alone.properties";
private static final String CONSOLE_CONFIG = "console.properties";
private static final String DEFAULT_CONSOLE_CONFIG = "default_console.properties";
private static final String INIT_FIELDS_JSON = "config/init-fields.json";
private List<InitFieldDef> fieldDefsCache;
private static final String ALONE_CONFIG = "alone.properties";
private static final String DEFAULT_ALONE_CONFIG = "default_alone.properties";
private static final String CONSOLE_CONFIG = "console.properties";
private static final String DEFAULT_CONSOLE_CONFIG = "default_console.properties";
private static final String INIT_FIELDS_JSON = "config/init-fields.json";
private static final Set<String> INIT_APP_OVERRIDE_CONFIG_KEYS = Set.of("server.port");
private List<InitFieldDef> fieldDefsCache;

@PostConstruct
public void init() throws IOException {
Expand Down Expand Up @@ -129,17 +131,11 @@ private Properties loadDefaultConfigProperties() {
Properties props = new Properties();
try {
if (isAloneMode()) {
loadClasspathProperties(props, DEFAULT_ALONE_CONFIG);
if (hasExplicitAppHome()) {
loadAppHomeProperties(props, ALONE_CONFIG);
}
loadRuntimeProperties(props, DEFAULT_ALONE_CONFIG, ALONE_CONFIG);
} else {
loadClasspathProperties(props, DEFAULT_CONSOLE_CONFIG);
if (hasExplicitAppHome()) {
loadAppHomeProperties(props, CONSOLE_CONFIG);
}
loadRuntimeProperties(props, DEFAULT_CONSOLE_CONFIG, CONSOLE_CONFIG);
}
overlaySystemProperties(props);
overlaySystemProperties(props, INIT_APP_OVERRIDE_CONFIG_KEYS);
} catch (Exception e) {
log.error("[SysInitService] Failed to load default config properties", e);
}
Expand Down Expand Up @@ -169,9 +165,7 @@ private String resolveDefaultHostIp() {

private void loadRuntimeProperties(Properties props, String defaultConfigName, String runtimeConfigName) throws IOException {
loadClasspathProperties(props, defaultConfigName);
if (hasExplicitAppHome()) {
loadAppHomeProperties(props, runtimeConfigName);
} else {
if (!loadAppHomeProperties(props, runtimeConfigName)) {
loadClasspathProperties(props, runtimeConfigName);
}
}
Expand All @@ -183,28 +177,29 @@ private void loadClasspathProperties(Properties props, String resourcePath) thro
}
}

private void loadAppHomeProperties(Properties props, String configName) throws IOException {
private boolean loadAppHomeProperties(Properties props, String configName) throws IOException {
Path configPath = Paths.get(GlobalConfUtils.getAppHome(), "conf", configName);
if (!Files.exists(configPath)) {
return;
return false;
}

try (InputStream input = Files.newInputStream(configPath)) {
props.load(input);
}
return true;
}

private void overlaySystemProperties(Properties props) {
overlaySystemProperties(props, Set.of());
}

private void overlaySystemProperties(Properties props, Set<String> ignoredKeys) {
System.getProperties().forEach((key, value) -> {
if (key instanceof String && value != null) {
props.setProperty((String) key, String.valueOf(value));
if (key instanceof String propertyKey && value != null && !ignoredKeys.contains(propertyKey)) {
props.setProperty(propertyKey, String.valueOf(value));
}
});
}

private boolean hasExplicitAppHome() {
return StringUtils.isNotBlank(System.getProperty("app.home"));
}

private boolean isAloneMode() { return "embedded".equals(System.getProperty("app.mode")); }
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
INIT_FIELD_JDBC_URL_LABEL=JDBC URL
INIT_FIELD_JDBC_URL_LABEL=数据库连接串
INIT_FIELD_JDBC_URL_DESC=MySQL 数据库连接地址,格式为 jdbc:mysql://host:port/database
INIT_FIELD_DB_USERNAME_LABEL=用户
INIT_FIELD_DB_USERNAME_DESC=连接数据库的用户名
INIT_FIELD_DB_PASSWORD_LABEL=密码
INIT_FIELD_DB_PASSWORD_DESC=连接数据库的密码
INIT_FIELD_JWT_SECRET_LABEL=JWT Secret
INIT_FIELD_JWT_SECRET_LABEL=登录签名密钥
INIT_FIELD_JWT_SECRET_DESC=JWT 签名密钥,用于生成和验证登录令牌。建议使用足够长度的随机字符串
INIT_FIELD_ADMIN_EMAIL_LABEL=管理员邮箱
INIT_FIELD_ADMIN_EMAIL_DESC=系统初始化后默认管理员的登录邮箱
Expand Down
1 change: 1 addition & 0 deletions frontend/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ cd frontend && npm run check-i18n
- 使用 `package-lock.json`,默认使用 `npm`,不要擅自切换到其他包管理器。
- 构建产物输出到 `dist/templates/`,由后端 Gradle `cgdm-web` 模块打包。
- 全量构建前端资源也可通过 `cd package && ./all_build.sh web` 触发。
- 每次完成前端改造后,必须从仓库根目录运行 `cd package && ./all_build.sh web` 作为最终验证。

### 本地联调

Expand Down
4 changes: 3 additions & 1 deletion frontend/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export default {
colorBgContainer: '#ffffff',
colorBorder: '#dfdfdf',
colorText: '#171717',
colorTextLightSolid: '#ffffff',
colorTextSecondary: '#707070',
controlHeight: 32,
controlHeightSM: 28
Expand All @@ -64,7 +65,8 @@ export default {
},
Button: {
primaryShadow: 'none',
defaultShadow: 'none'
defaultShadow: 'none',
primaryColor: '#ffffff'
}
}
},
Expand Down
25 changes: 16 additions & 9 deletions frontend/src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -3759,29 +3759,32 @@
"mu-biao-shi-li-id": "Target Instance ID",
"initialization.title": "CloudDM System Initialization",
"initialization.upgradeTitle": "CloudDM System Upgrade",
"initialization.stage.db": "Database",
"initialization.stage.security": "Security",
"initialization.stage.connectivity": "Connectivity",
"initialization.productInitTitle": "Product Initialization",
"initialization.productUpgradeTitle": "Product Upgrade",
"initialization.stage.db": "Database Config",
"initialization.stage.security": "Login Config",
"initialization.stage.connectivity": "Service Config",
"initialization.stage.confirm": "Confirm",
"initialization.stage.execute": "Execute",
"initialization.stage.execute": "Initialize",
"initialization.step.db": "Database Configuration",
"initialization.step.security": "Security Configuration",
"initialization.step.connectivity": "Connectivity Configuration",
"initialization.step.confirm": "Confirm",
"initialization.testConnection": "Test Connection",
"initialization.applyConfig": "Initialize",
"initialization.applyConfig": "Confirm",
"initialization.upgradeAction": "Upgrade",
"initialization.prev": "Previous",
"initialization.next": "Next",
"initialization.dbError": "Database Connection Failed",
"initialization.startFailed": "Startup Failed!",
"initialization.loading": "Loading...",
"initialization.restarting": "Please wait for the system to restart...",
"initialization.restarting": "Please wait for the system to restart",
"initialization.redirectingHome": "Redirecting to home...",
"initialization.installing": "Running initialization tasks...",
"initialization.upgrading": "Running upgrade tasks...",
"initialization.installFailed": "Initialization failed",
"initialization.upgradeFailed": "Upgrade failed",
"initialization.upgradeSuccessRestarting": "Upgrade succeeded. Please wait for the system to restart...",
"initialization.upgradeSuccessRestarting": "Please wait for the system to restart",
"initialization.executionScripts": "Script List",
"initialization.confirmTabDatabase": "Configuration",
"initialization.emptyValue": "(empty)",
Expand Down Expand Up @@ -3820,6 +3823,8 @@
"initialization.dbRebuildPromptInline": "Clear and rebuild the database?",
"initialization.dbRebuildChoiceRequired": "Choose whether to clear and rebuild the existing database",
"initialization.dbFormIncomplete": "Complete the database connection information",
"initialization.dbTestRequired": "Test the connection first",
"initialization.dbTestNotPassed": "Make sure the connection test succeeds first",
"initialization.securityFormIncomplete": "Complete the security configuration information",
"initialization.dbUsernameFallback": "User",
"initialization.dbPasswordFallback": "Password",
Expand All @@ -3834,19 +3839,20 @@
"initialization.generate": "Generate",
"initialization.jdbcMode.generated": "Generated Mode",
"initialization.jdbcMode.custom": "Custom Mode",
"initialization.jdbcDataSourceType": "Type",
"initialization.jdbcDataSourceType": "Database Type",
"initialization.jdbcDataSourceTypeValue": "MySQL",
"initialization.mysqlDriverLabel": "Driver",
"initialization.mysqlDriverTitle": "MySQL 8.0+ Driver",
"initialization.mysqlDriverChecking": "Checking driver status...",
"initialization.mysqlDriverPreparing": "Downloading driver...",
"initialization.mysqlDriverDownloadingButton": "Downloading",
"initialization.mysqlDriverReady": "Driver ready",
"initialization.mysqlDriverUnavailable": "Driver is not ready. Download it first.",
"initialization.mysqlDriverUnavailable": "Driver is not ready.",
"initialization.mysqlDriverDownload": "Download Driver",
"initialization.mysqlDriverRetryCheck": "Retry Check",
"initialization.mysqlDriverRetryDownload": "Retry Download",
"initialization.mysqlDriverDownloadRequired": "Please download the metadata database driver first.",
"initialization.mysqlDriverNotLoaded": "Driver is not ready.",
"initialization.mysqlDriverCheckTimeout": "Checking the driver status timed out. Please retry.",
"initialization.jdbcHostLabel": "Host",
"initialization.jdbcPortLabel": "Port",
Expand All @@ -3856,6 +3862,7 @@
"initialization.jdbcDatabase": "Database",
"initialization.jdbcDatabasePlaceholder": "For example cdmgr",
"initialization.jdbcDatabaseCreate": "Create",
"initialization.jdbcDatabasePendingCreate": " (to create)",
"initialization.jdbcDatabaseExists": "Existing",
"initialization.jdbcTimezone": "Server Time Zone",
"initialization.jdbcTimezonePlaceholder": "For example Asia/Shanghai",
Expand Down
29 changes: 18 additions & 11 deletions frontend/src/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -3755,29 +3755,32 @@
"mu-biao-shi-li-id": "目标实例ID",
"initialization.title": "CloudDM 系统初始化",
"initialization.upgradeTitle": "CloudDM 系统升级",
"initialization.stage.db": "数据库",
"initialization.stage.security": "安全性",
"initialization.stage.connectivity": "连接性",
"initialization.productInitTitle": "产品初始化",
"initialization.productUpgradeTitle": "产品升级",
"initialization.stage.db": "数据库配置",
"initialization.stage.security": "登录配置",
"initialization.stage.connectivity": "服务配置",
"initialization.stage.confirm": "确认配置",
"initialization.stage.execute": "执行",
"initialization.stage.execute": "初始化",
"initialization.step.db": "数据库配置",
"initialization.step.security": "安全配置",
"initialization.step.connectivity": "连接性配置",
"initialization.step.confirm": "确认配置",
"initialization.testConnection": "测试连接",
"initialization.applyConfig": "初始化",
"initialization.applyConfig": "确认",
"initialization.upgradeAction": "升级",
"initialization.prev": "上一步",
"initialization.next": "下一步",
"initialization.dbError": "数据库连接失败",
"initialization.startFailed": "启动失败!",
"initialization.loading": "加载中...",
"initialization.restarting": "请勿刷新,等待系统重启...",
"initialization.restarting": "请勿刷新,等待系统重启",
"initialization.redirectingHome": "正在跳转到首页",
"initialization.installing": "初始化任务执行中...",
"initialization.upgrading": "升级任务执行中...",
"initialization.installFailed": "初始化失败",
"initialization.upgradeFailed": "升级失败",
"initialization.upgradeSuccessRestarting": "升级成功,请勿刷新,等待系统重启...",
"initialization.upgradeSuccessRestarting": "请勿刷新,等待系统重启",
"initialization.executionScripts": "脚本清单",
"initialization.confirmTabDatabase": "配置信息",
"initialization.emptyValue": "(空)",
Expand Down Expand Up @@ -3816,6 +3819,8 @@
"initialization.dbRebuildPromptInline": "是否清除并重建数据库?",
"initialization.dbRebuildChoiceRequired": "请选择是否清空并重建现有数据库",
"initialization.dbFormIncomplete": "请填写完整的数据库连接信息",
"initialization.dbTestRequired": "请先测试连接",
"initialization.dbTestNotPassed": "请先测试连接成功",
"initialization.securityFormIncomplete": "请填写完整的安全配置信息",
"initialization.dbUsernameFallback": "用户",
"initialization.dbPasswordFallback": "密码",
Expand All @@ -3825,24 +3830,25 @@
"initialization.useExistingDatabaseInit": "使用已有数据库初始化系统表。",
"initialization.optionYes": "是",
"initialization.optionNo": "否",
"initialization.confirmCreateDatabase": "缺库时自动创建数据库",
"initialization.confirmCreateDatabase": "自动创建数据库",
"initialization.confirmRebuildDatabase": "非空库清空并重建",
"initialization.generate": "生成",
"initialization.jdbcMode.generated": "生成模式",
"initialization.jdbcMode.custom": "自定义模式",
"initialization.jdbcDataSourceType": "驱动",
"initialization.jdbcDataSourceType": "数据库类型",
"initialization.jdbcDataSourceTypeValue": "MySQL",
"initialization.mysqlDriverLabel": "驱动",
"initialization.mysqlDriverTitle": "MySQL 8.0+ 驱动",
"initialization.mysqlDriverChecking": "检查驱动状态中...",
"initialization.mysqlDriverPreparing": "驱动下载中...",
"initialization.mysqlDriverDownloadingButton": "下载中",
"initialization.mysqlDriverReady": "驱动已就绪",
"initialization.mysqlDriverUnavailable": "驱动未就绪,请先下载",
"initialization.mysqlDriverReady": "就绪",
"initialization.mysqlDriverUnavailable": "驱动未就绪",
"initialization.mysqlDriverDownload": "下载驱动",
"initialization.mysqlDriverRetryCheck": "重新检查",
"initialization.mysqlDriverRetryDownload": "重试",
"initialization.mysqlDriverDownloadRequired": "请先下载元信息数据库驱动",
"initialization.mysqlDriverNotLoaded": "驱动未就绪",
"initialization.mysqlDriverCheckTimeout": "检查驱动状态超时,请重试",
"initialization.jdbcHostLabel": "主机",
"initialization.jdbcPortLabel": "端口",
Expand All @@ -3852,6 +3858,7 @@
"initialization.jdbcDatabase": "数据库",
"initialization.jdbcDatabasePlaceholder": "例如 cdmgr",
"initialization.jdbcDatabaseCreate": "新建",
"initialization.jdbcDatabasePendingCreate": "(待创建)",
"initialization.jdbcDatabaseExists": "已有",
"initialization.jdbcTimezone": "时区",
"initialization.jdbcTimezonePlaceholder": "例如 Asia/Shanghai",
Expand Down
12 changes: 8 additions & 4 deletions frontend/src/styles/antdv.less
Original file line number Diff line number Diff line change
Expand Up @@ -75,24 +75,28 @@
.ant-btn-primary {
background: var(--primary-color) !important;
border-color: var(--primary-color) !important;
color: #171717 !important;
color: #ffffff !important;

span {
color: #ffffff !important;
}

&:hover {
background-color: @hover-color !important;
border-color: @hover-color !important;
color: #171717 !important;
color: #ffffff !important;
}

&:active {
background-color: @active-color !important;
border-color: @active-color !important;
color: #171717 !important;
color: #ffffff !important;
}

&:focus {
background: var(--primary-color) !important;
border-color: var(--primary-color) !important;
color: #171717 !important;
color: #ffffff !important;
}
}

Expand Down
10 changes: 7 additions & 3 deletions frontend/src/styles/app-shell.less
Original file line number Diff line number Diff line change
Expand Up @@ -907,18 +907,22 @@
.ant-btn-primary:not([disabled]) {
background: var(--primary-color) !important;
border-color: var(--primary-color) !important;
color: #171717 !important;
color: #ffffff !important;

span {
color: #171717 !important;
color: #ffffff !important;
}

&:hover,
&:focus {
opacity: 0.92;
background: var(--primary-color) !important;
border-color: var(--primary-color) !important;
color: #171717 !important;
color: #ffffff !important;

span {
color: #ffffff !important;
}
}
}

Expand Down
10 changes: 7 additions & 3 deletions frontend/src/styles/cloudCanal.less
Original file line number Diff line number Diff line change
Expand Up @@ -102,20 +102,24 @@ a {
}

.ivu-btn-primary {
color: #171717;
color: #ffffff;
background-color: @primary-color;
border-color: @primary-color;

span {
color: #171717;
color: #ffffff;
}
}

.ivu-btn-primary:hover {
background-color: @hover-color;
border-color: @hover-color;
background-image: none;
color: #171717;
color: #ffffff;

span {
color: #ffffff;
}
}

.ivu-btn-dashed {
Expand Down
Loading