diff --git a/src/main/java/com/chansos/dubbogo/project_generator/EmptyProjectGenerator.java b/src/main/java/com/chansos/dubbogo/project_generator/EmptyProjectGenerator.java index d3cfa04d8c74364c2604c5c251c03e91b59d1dcd..f663e2daedb70bcb6af164a3efb6f94dfb1ceacf 100644 --- a/src/main/java/com/chansos/dubbogo/project_generator/EmptyProjectGenerator.java +++ b/src/main/java/com/chansos/dubbogo/project_generator/EmptyProjectGenerator.java @@ -5,6 +5,7 @@ import com.chansos.dubbogo.util.TemplateUtils; import com.intellij.openapi.project.Project; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,14 +23,6 @@ public class EmptyProjectGenerator implements ProjectGenerator { // Application config file add(new TemplateFileModel(basePath, "/resources/application.yml", "/resources/application.yml")); - // Application constant file - add(new TemplateFileModel(basePath, "/common/constant.go1", "/common/constant.go")); - // Application config loader - add(new TemplateFileModel(basePath, "/config/loader.go1", "/config/loader.go")); - // Application components - add(new TemplateFileModel(basePath, "/middleware/dubbo.go1", "/middleware/dubbo.go")); - add(new TemplateFileModel(basePath, "/middleware/init.go1", "/middleware/init.go")); - // Dubbo Go Sample add(new TemplateFileModel(basePath, "/service/api_ping.go1", "/service/api_ping.go")); add(new TemplateFileModel(basePath, "/dto/api_ping.go1", "/dto/api_ping.go")); @@ -46,49 +39,73 @@ public class EmptyProjectGenerator implements ProjectGenerator { // Web Service private final List webServiceTemplateFiles = new ArrayList<>() {{ - add(new TemplateFileModel(basePath, "/middleware/router.go1", "/middleware/router.go")); + add(new TemplateFileModel(basePath, "/controller/controller_entry.go1", "/controller/controller_entry.go")); add(new TemplateFileModel(basePath, "/controller/api_home.go1", "/controller/api_home.go")); }}; // Memory Cache private final List memoryCacheTemplateFiles = new ArrayList<>() {{ - add(new TemplateFileModel(basePath, "/component/redis.go1", "/component/redis.go")); - add(new TemplateFileModel(basePath, "/middleware/redis.go1", "/middleware/redis.go")); - add(new TemplateFileModel(basePath, "/util/redis_util.go1", "/util/redis_util.go")); }}; // Database private final List databaseTemplateFiles = new ArrayList<>() {{ - add(new TemplateFileModel(basePath, "/component/database.go1", "/component/database.go")); - add(new TemplateFileModel(basePath, "/middleware/database.go1", "/middleware/database.go")); }}; private ComponentsGroup.ComponentConfigs components; + private final Map componentDefaultArgs = new HashMap<>() {{ + put("${component-mod-import}", ComponentsGroup.componentModVersion); + + put("${web-service-yml-config}", ""); + put("${web-service-mod-import}", ""); + put("${web-service-main-import}", ""); + put("${web-service-main-setup-hook-func}", ""); + put("${web-service-main-setup-hook-statement}", ""); + + put("${memory-cache-yml-config}", ""); + put("${memory-cache-mod-import}", ""); + put("${memory-cache-main-import}", ""); + put("${memory-cache-main-setup-hook-func}", ""); + put("${memory-cache-main-setup-hook-statement}", ""); + + put("${database-yml-config}", ""); + put("${database-mod-import}", ""); + put("${database-main-import}", ""); + put("${database-main-setup-hook-func}", ""); + put("${database-main-setup-hook-statement}", ""); + }}; + @Override public void generate(Project projectName, String path, Map args) { + args.putAll(componentDefaultArgs); List allTemplateFile = new ArrayList<>(templateFiles); ComponentsGroup.WebServiceConfig webServiceConfig = components.getWebServiceConfig(); if (webServiceConfig != null) { allTemplateFile.addAll(webServiceTemplateFiles); args.put("${web-service-yml-config}", TemplateUtils.replaceContent(webServiceConfig.toString(), args)); - } else { - args.put("${web-service-yml-config}", ""); + args.put("${web-service-mod-import}", webServiceConfig.modImport()); + args.put("${web-service-main-import}", webServiceConfig.mainImport()); + args.put("${web-service-main-setup-hook-func}", webServiceConfig.mainSetupHookFunc()); + args.put("${web-service-main-setup-hook-statement}", webServiceConfig.mainSetupHookStatement()); } ComponentsGroup.MemoryCacheConfig memoryCacheConfig = components.getMemoryCacheConfig(); if (memoryCacheConfig != null) { allTemplateFile.addAll(memoryCacheTemplateFiles); args.put("${memory-cache-yml-config}", TemplateUtils.replaceContent(memoryCacheConfig.toString(), args)); - } else { - args.put("${memory-cache-yml-config}", ""); + args.put("${memory-cache-mod-import}", memoryCacheConfig.modImport()); + args.put("${memory-cache-main-import}", memoryCacheConfig.mainImport()); + args.put("${memory-cache-main-setup-hook-func}", memoryCacheConfig.mainSetupHookFunc()); + args.put("${memory-cache-main-setup-hook-statement}", memoryCacheConfig.mainSetupHookStatement()); } ComponentsGroup.DatabaseConfig databaseConfig = components.getDatabaseConfig(); if (databaseConfig != null) { allTemplateFile.addAll(databaseTemplateFiles); args.put("${database-yml-config}", TemplateUtils.replaceContent(databaseConfig.toString(), args)); - } else { - args.put("${database-yml-config}", ""); + args.put("${database-mod-import}", databaseConfig.modImport()); + args.put("${database-main-import}", databaseConfig.mainImport()); + args.put("${database-main-setup-hook-func}", databaseConfig.mainSetupHookFunc()); + args.put("${database-main-setup-hook-statement}", databaseConfig.mainSetupHookStatement()); } for (TemplateFileModel templateFile : allTemplateFile) { diff --git a/src/main/java/com/chansos/dubbogo/project_generator/GoModuleBuilder.java b/src/main/java/com/chansos/dubbogo/project_generator/GoModuleBuilder.java index 6ec5e47ee2b4cfe3437e995547c200070fbe2478..98c215a1ec00e548f93f365ba86c486a646fe809 100644 --- a/src/main/java/com/chansos/dubbogo/project_generator/GoModuleBuilder.java +++ b/src/main/java/com/chansos/dubbogo/project_generator/GoModuleBuilder.java @@ -73,7 +73,7 @@ public class GoModuleBuilder extends com.intellij.ide.util.projectWizard.ModuleB commonArgs.put("${project-path}", rootPath); commonArgs.put("${project-name}", project.getName().replace(' ', '_')); Registry registry = moduleWizardStep.getRegistry(); - commonArgs.put("${registry-protocol}", registry.getName()); + commonArgs.put("${registry-protocol}", registry.getAlias()); commonArgs.put("${registry-address}", registry.getDefaultAddress()); return commonArgs; } diff --git a/src/main/java/com/chansos/dubbogo/ui/ComponentsGroup.java b/src/main/java/com/chansos/dubbogo/ui/ComponentsGroup.java index 50ffb5a9c2a07a0d140deb9c85ec9bbb54cbc424..c16f3e8f0a59d81076db9b4af8bdabea6fe7ab25 100644 --- a/src/main/java/com/chansos/dubbogo/ui/ComponentsGroup.java +++ b/src/main/java/com/chansos/dubbogo/ui/ComponentsGroup.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Optional; public class ComponentsGroup extends JBPanel { + public final static String componentModVersion = "v0.1.0"; private boolean useWebService; private JTextField webServicePortText; @@ -330,6 +331,25 @@ public class ComponentsGroup extends JBPanel { public String toString() { return "server: # Web Service\n" + " host: 0.0.0.0\n" + " port: " + port + "\n"; } + + public String mainImport() { + return "webMiddleware \"gitee.com/changeden/dubbo-go-middleware-web/middleware\""; + } + + public String mainSetupHookFunc() { + return "func onWebMiddlewareSetup(router *gin.Engine) {\n" + + "\tcontroller.SetRouter(router)\n" + + "\tlogger.Info(\"web middleware setup\")\n" + + "}\n"; + } + + public String mainSetupHookStatement() { + return "webMiddleware.NewWebSetupHook(onWebMiddlewareSetup),\n"; + } + + public String modImport() { + return "gitee.com/changeden/dubbo-go-middleware-web " + componentModVersion + "\n"; + } } public WebServiceConfig getWebServiceConfig() { @@ -390,7 +410,25 @@ public class ComponentsGroup extends JBPanel { @Override public String toString() { - return "redis: # Redis driver\n" + " host: " + address + "\n" + " port: " + port + "\n" + " password: " + password + "\n" + " defaultDb: " + defaultDB + "\n"; + return "redis: # Redis driver\n" + " host: " + address + "\n" + " port: " + port + "\n" + " password: " + password + "\n" + " defaultDb: " + defaultDB + "\n" + " max_retries: 1\n"; + } + + public String mainImport() { + return "redisMiddleware \"gitee.com/changeden/dubbo-go-middleware-redis/middleware\""; + } + + public String mainSetupHookFunc() { + return "func onRedisMiddlewareSetup() {\n" + + "\tlogger.Info(\"redis middleware setup\")\n" + + "}\n"; + } + + public String mainSetupHookStatement() { + return "redisMiddleware.NewRedisSetupHook(onRedisMiddlewareSetup),\n"; + } + + public String modImport() { + return "gitee.com/changeden/dubbo-go-middleware-redis " + componentModVersion + "\n"; } } @@ -474,6 +512,24 @@ public class ComponentsGroup extends JBPanel { public String toString() { return "database: # Database driver\n" + " dialect: " + dialect + "\n" + " host: " + address + "\n" + " port: " + port + "\n" + " database: ${project-name}-db\n" + " username: " + username + "\n" + " password: " + password + "\n"; } + + public String mainImport() { + return "databaseMiddleware \"gitee.com/changeden/dubbo-go-middleware-database/middleware\""; + } + + public String mainSetupHookFunc() { + return "func onDatabaseMiddlewareSetup() {\n" + + "\tlogger.Info(\"database middleware setup\")\n" + + "}\n"; + } + + public String mainSetupHookStatement() { + return "databaseMiddleware.NewDatabaseSetupHook(onDatabaseMiddlewareSetup),\n"; + } + + public String modImport() { + return "gitee.com/changeden/dubbo-go-middleware-database " + componentModVersion + "\n"; + } } public DatabaseConfig getDatabaseConfig() { diff --git a/src/main/java/com/chansos/dubbogo/ui/RegistriesGroup.java b/src/main/java/com/chansos/dubbogo/ui/RegistriesGroup.java index d444f989dc8f266a12079d168fd60b61da3f772a..b95493012165e0a4654ec9c976f5dc596ce953c1 100644 --- a/src/main/java/com/chansos/dubbogo/ui/RegistriesGroup.java +++ b/src/main/java/com/chansos/dubbogo/ui/RegistriesGroup.java @@ -49,7 +49,7 @@ public class RegistriesGroup extends JBPanel { try { Optional option = options.stream().filter(AbstractButton::isSelected).findFirst(); if (option.isPresent()) { - name = option.get().getToolTipText(); + name = option.get().getName(); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/com/chansos/dubbogo/util/ResourceUtils.java b/src/main/java/com/chansos/dubbogo/util/ResourceUtils.java index 674ff0eea912861aaf54c3e33e16149164857c41..997d8fb3092e8bab2456d3f9e2e6c0c9447277f7 100644 --- a/src/main/java/com/chansos/dubbogo/util/ResourceUtils.java +++ b/src/main/java/com/chansos/dubbogo/util/ResourceUtils.java @@ -1,8 +1,14 @@ package com.chansos.dubbogo.util; +import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.GeneralCommandLine; +import java.io.File; import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class ResourceUtils { public static InputStream getResource(String path) { @@ -15,14 +21,67 @@ public class ResourceUtils { public static void init(String path) { try { - GeneralCommandLine go_mod_tidy = new GeneralCommandLine("go"); - go_mod_tidy.withEnvironment("GO111MODULE", "on"); - go_mod_tidy.withParameters("mod", "tidy"); - go_mod_tidy.setWorkDirectory(path); - Process process = go_mod_tidy.createProcess(); - process.waitFor(); + cmd(path, + "go", + new HashMap<>() {{ + put("GO111MODULE", "on"); + }}, + new HashMap<>() {{ + put("mod", "tidy"); + }}); } catch (Exception e) { e.printStackTrace(); } + + for (String p : listFile(new File(path))) { + try { + cmd(path, + "go", + new HashMap<>() {{ + put("GO111MODULE", "on"); + }}, + new HashMap<>() {{ + put("fmt", p); + }}); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private static void cmd(String path, String p, Map env, Map param) throws ExecutionException, InterruptedException { + GeneralCommandLine command = new GeneralCommandLine(p); + if (param != null) { + env.forEach(command::withEnvironment); + } + if (param != null) { + param.forEach(command::withParameters); + } + command.setWorkDirectory(path); + Process process = command.createProcess(); + process.waitFor(); + } + + private static List listFile(File root) { + if (root == null || !root.exists()) { + return null; + } + if (root.isFile() && root.getAbsolutePath().endsWith(".go")) { + return new ArrayList<>() {{ + add(root.getAbsolutePath()); + }}; + } + List list = new ArrayList<>(); + File[] files = root.listFiles(); + if (files == null) { + return null; + } + for (File file : files) { + List r = listFile(file); + if (r != null) { + list.addAll(r); + } + } + return list; } } diff --git a/src/main/resources/project_template/empty_project/cmd/main.go1 b/src/main/resources/project_template/empty_project/cmd/main.go1 index a817d1653a9054687f44034562425ddccba247c9..429668e6d0645146ca53afec032d548f8188ed87 100644 --- a/src/main/resources/project_template/empty_project/cmd/main.go1 +++ b/src/main/resources/project_template/empty_project/cmd/main.go1 @@ -1,62 +1,36 @@ package main import ( - "os" - "os/signal" - "syscall" - "time" -) - -import ( + "${project-name}/controller" "dubbo.apache.org/dubbo-go/v3/common/logger" + ${database-main-import} + dubboMiddleware "gitee.com/changeden/dubbo-go-middleware-dubbo/middleware" + ${memory-cache-main-import} + ${web-service-main-import} + "gitee.com/changeden/dubbo-go-starter" + "github.com/gin-gonic/gin" ) -import ( - "${project-name}/config" - "${project-name}/middleware" -) +${web-service-main-setup-hook-func} -var ( - survivalTimeout = int(3e9) -) +${database-main-setup-hook-func} -// export CONF_APPLICATION_FILE_PATH=${project-path}/resources/application.yml -func main() { - err := config.Load() // load application config - if err != nil { - logger.Error(err) - return - } - logger.Debug("Load application config complete.") +${memory-cache-main-setup-hook-func} + +func onDubboMiddlewareSetup() { + logger.Info("dubbo-go middleware setup") +} - err = middleware.Install() // boot application +// export CONF_APPLICATION_FILE_PATH=D:/Demo/dubbo-go-empty-project/resources/application.yml +func main() { + err := starter.NewStarter().AddMiddlewareSetupHooks( + dubboMiddleware.NewDubboSetupHook(onDubboMiddlewareSetup), + ${web-service-main-setup-hook-statement} + ${database-main-setup-hook-statement} + ${memory-cache-main-setup-hook-statement} + ).Start() if err != nil { logger.Error(err) return } - - initSignal() // wait close signal -} - -func initSignal() { - signals := make(chan os.Signal, 1) - // It is not possible to block SIGKILL or syscall.SIGSTOP - signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) - for { - sig := <-signals - logger.Infof("get signal %s", sig.String()) - switch sig { - case syscall.SIGHUP: - // reload() - default: - time.AfterFunc(time.Duration(survivalTimeout), func() { - logger.Warnf("app exit now by force...") - os.Exit(1) - }) - - // The program exits normally or timeout forcibly exits. - logger.Infof("provider app exit now...") - return - } - } } diff --git a/src/main/resources/project_template/empty_project/common/constant.go1 b/src/main/resources/project_template/empty_project/common/constant.go1 deleted file mode 100644 index 813611a40f4a519ddd5d51b21c52f572231cd30a..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/common/constant.go1 +++ /dev/null @@ -1,8 +0,0 @@ -package common - -// System Config -const ( - ApplicationConfigFilePathKey = "CONF_APPLICATION_FILE_PATH" - DefaultApplicationConfigFilePath = "resources/application.yml" - DubboConfigFilePathKey = "DUBBO_GO_CONFIG_PATH" -) diff --git a/src/main/resources/project_template/empty_project/component/database.go1 b/src/main/resources/project_template/empty_project/component/database.go1 deleted file mode 100644 index aa51c1658e9b3f227e705ae7703f3ca79d652530..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/component/database.go1 +++ /dev/null @@ -1,17 +0,0 @@ -package component - -import ( - "gorm.io/gorm" -) - -var ( - DatabaseComponent = &databaseComponent{} -) - -type databaseComponent struct { - Db *gorm.DB -} - -func GetDatabase() *gorm.DB { - return DatabaseComponent.Db -} diff --git a/src/main/resources/project_template/empty_project/component/redis.go1 b/src/main/resources/project_template/empty_project/component/redis.go1 deleted file mode 100644 index c8f6842d922011e4238b8ad115b0d4c1b290d21f..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/component/redis.go1 +++ /dev/null @@ -1,43 +0,0 @@ -package component - -import ( - "sync" -) - -import ( - "github.com/go-redis/redis/v8" -) - -import ( - "${project-name}/util" -) - -var ( - RedisComponent = &redisComponent{} -) - -type redisComponent struct { - sync.Mutex - - Addr string - Password string - MaxRetries int - - Redis *redis.Client - - DbMap map[int]*redis.Client -} - -func GetRedis() *redis.Client { - return RedisComponent.Redis -} - -func GetRedisByIndex(dbIndex int) *redis.Client { - RedisComponent.Lock() - if client, notNil := RedisComponent.DbMap[dbIndex]; !notNil || client == nil { - client = util.NewRedisDb(RedisComponent.Addr, RedisComponent.Password, dbIndex, RedisComponent.MaxRetries) - RedisComponent.DbMap[dbIndex] = client - } - RedisComponent.Unlock() - return RedisComponent.DbMap[dbIndex] -} diff --git a/src/main/resources/project_template/empty_project/config/loader.go1 b/src/main/resources/project_template/empty_project/config/loader.go1 deleted file mode 100644 index 695872339b5577a6cfa7f0a16733a36908629f11..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/config/loader.go1 +++ /dev/null @@ -1,137 +0,0 @@ -package config - -import ( - "fmt" - "os" - "strconv" - "strings" - "time" -) - -import ( - "dubbo.apache.org/dubbo-go/v3/common/logger" - "gopkg.in/yaml.v2" -) - -import ( - "${project-name}/common" -) - -type ApplicationConfig struct { - Server *ServerConfig `yaml:"server"` - Redis *RedisConfig `yaml:"redis"` - Database *Database `yaml:"database"` -} - -type ServerConfig struct { - Host string `yaml:"host"` - Port string `yaml:"port"` -} - -type RedisConfig struct { - Host string `yaml:"host"` - Port string `yaml:"port"` - Password string `yaml:"password"` - DefaultDB int `yaml:"defaultDb"` - MaxRetries int `yaml:"max_retries"` -} - -type Database struct { - Dialect string `yaml:"dialect"` - Host string `yaml:"host"` - Port string `yaml:"port"` - Database string `yaml:"database"` - Username string `yaml:"username"` - Password string `yaml:"password"` -} - -var ( - Config ApplicationConfig - - ClusterId int64 = 0 - ClusterStartTimestamp int64 = time.Now().UnixNano() - WorkerId int64 = 0 -) - -var ( - configPath string - dubboConfigPath string -) - -func getEnvAndTrim(key string) string { - return strings.TrimSpace(os.Getenv(key)) -} - -func presetEnv() { - configPath = getEnvAndTrim(common.ApplicationConfigFilePathKey) // 通过环境变量获取应用配置文件 - dubboConfigPath = getEnvAndTrim(common.DubboConfigFilePathKey) // Dubbo服务配置文件 - - if configPath == "" { - configPath = common.DefaultApplicationConfigFilePath // 默认配置文件 - } - if dubboConfigPath == "" { // 默认配置文件 - err := os.Setenv(common.DubboConfigFilePathKey, common.DefaultApplicationConfigFilePath) - if err != nil { - logger.Error(err) - } else { - dubboConfigPath = common.DefaultApplicationConfigFilePath - } - } -} - -func checkFile(path string, pathKey string) (file *os.File, err error) { - file, err = os.Open(path) - if err != nil { - logger.Error(err) - err = fmt.Errorf("环境变量[%s]所配置的文件地址[%s]不存在", pathKey, path) - } - return -} - -func Load() (err error) { - presetEnv() - - var configFile *os.File - configFile, err = checkFile(configPath, common.ApplicationConfigFilePathKey) - if err != nil { - return - } - err = yaml.NewDecoder(configFile).Decode(&Config) - if err != nil { - return - } - _, err = checkFile(dubboConfigPath, common.DubboConfigFilePathKey) - return -} - -func parseIntOrDefault(key string, getDef func() int64) int64 { - res, err := strconv.ParseInt(key, 10, 64) - if err == nil { - return res - } - return getDef() -} - -func parseK8sClusterIndex(k8sClusterId string) int64 { - return parseIntOrDefault(k8sClusterId, func() int64 { - return ClusterStartTimestamp % 3 - }) -} - -func parseK8sClusterStartTimestamp(k8sClusterStartTimestamp string) int64 { - return parseIntOrDefault(k8sClusterStartTimestamp, func() int64 { - return ClusterStartTimestamp - }) -} - -func parseK8sPodIndex(k8sPodName string) int64 { - keyIndex := strings.LastIndex(k8sPodName, "-") - getDef := func() int64 { - return ClusterStartTimestamp % 127 - } - if keyIndex > 0 && keyIndex+1 < len(k8sPodName) { - k8sPodIndex := k8sPodName[keyIndex+1:] - return parseIntOrDefault(k8sPodIndex, getDef) - } - return getDef() -} diff --git a/src/main/resources/project_template/empty_project/controller/api_home.go1 b/src/main/resources/project_template/empty_project/controller/api_home.go1 index 5bf038e049adfb8ece92c55237371df1028d4310..e5ba0dbd10c267d9dc4cbc66188fc552e53b44ef 100644 --- a/src/main/resources/project_template/empty_project/controller/api_home.go1 +++ b/src/main/resources/project_template/empty_project/controller/api_home.go1 @@ -2,17 +2,11 @@ package controller import ( "context" - "net/http" -) - -import ( - "github.com/gin-gonic/gin" - "dubbo.apache.org/dubbo-go/v3/common/logger" -) - -import ( - "${project-name}/dto" - "${project-name}/service" + "${project-name}/dto" + "${project-name}/service" + "dubbo.apache.org/dubbo-go/v3/common/logger" + "github.com/gin-gonic/gin" + "net/http" ) func ApiPingLocal(ctx *gin.Context) { diff --git a/src/main/resources/project_template/empty_project/controller/controller_entry.go1 b/src/main/resources/project_template/empty_project/controller/controller_entry.go1 new file mode 100644 index 0000000000000000000000000000000000000000..0962575f2ed63d7869b5c13f1adefc79672df6c3 --- /dev/null +++ b/src/main/resources/project_template/empty_project/controller/controller_entry.go1 @@ -0,0 +1,12 @@ +package controller + +import ( + "github.com/gin-gonic/gin" +) + +func SetRouter(router *gin.Engine) { + apiGroup := router.Group("/api") + apiPingGroup := apiGroup.Group("/ping") + apiPingGroup.GET("local", ApiPingLocal) + apiPingGroup.GET("remote", ApiPingRemote) +} diff --git a/src/main/resources/project_template/empty_project/middleware/database.go1 b/src/main/resources/project_template/empty_project/middleware/database.go1 deleted file mode 100644 index 9c3883f39f5288fe2bcd3a9dd6277a550cfb2b7a..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/middleware/database.go1 +++ /dev/null @@ -1,92 +0,0 @@ -package middleware - -import ( - "fmt" - "log" - "os" - "time" -) - -import ( - "gorm.io/driver/clickhouse" - "gorm.io/driver/mysql" - "gorm.io/driver/postgres" - "gorm.io/driver/sqlserver" - "gorm.io/gorm" - "gorm.io/gorm/logger" - "gorm.io/gorm/schema" -) - -import ( - "${project-name}/component" - "${project-name}/config" -) - -var ( - db = &databaseComponent{} -) - -func init() { - registrySetup(db) -} - -type databaseComponent struct { -} - -func databaseLogger() logger.Interface { - return logger.New( - log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer - logger.Config{ - SlowThreshold: time.Second, // 慢 SQL 阈值 - LogLevel: logger.Info, // Log level - Colorful: false, // 禁用彩色打印 - }, - ) -} - -func (c *databaseComponent) Init() error { - dbConfig := config.Config.Database - dialect := dbConfig.Dialect - host := dbConfig.Host - port := dbConfig.Port - database := dbConfig.Database - username := dbConfig.Username - password := dbConfig.Password - var dialector gorm.Dialector - switch dialect { - case "mysql": - dialector = mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", - username, password, host, port, database)) - break; - case "postgres": - dialector = postgres.Open(fmt.Sprintf("user=%s password=%s host=%s port=%s DB.name=%s sslmode=disable TimeZone=Asia/Shanghai", - username, password, host, port, database)) - break; - case "sqlserver": - dialector = sqlserver.Open(fmt.Sprintf("sqlserver://%s:%s@%s:%s?database=%s", - username, password, host, port, database)) - break; - case "clickhouse": - dialector = clickhouse.Open(fmt.Sprintf("tcp://%s:%s?database=%s&username=%s&password=%s", - host, port, database, username, password)) - break; - } - if dialector == nil { - return fmt.Errorf("无效的数据库配置") - } - db, err := gorm.Open(dialector, &gorm.Config{ - NamingStrategy: schema.NamingStrategy{ - SingularTable: true, - }, - Logger: databaseLogger(), - }) - if err != nil { - return err - } - component.DatabaseComponent.Db = db - return nil -} - -func (c *databaseComponent) Async() bool { - return false -} diff --git a/src/main/resources/project_template/empty_project/middleware/dubbo.go1 b/src/main/resources/project_template/empty_project/middleware/dubbo.go1 deleted file mode 100644 index eb1d1de6cec0d2a574dd46aa46a4f4a323b2c460..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/middleware/dubbo.go1 +++ /dev/null @@ -1,55 +0,0 @@ -package middleware - -import ( - "time" -) - -import ( - "dubbo.apache.org/dubbo-go/v3/common/logger" - dubboConfig "dubbo.apache.org/dubbo-go/v3/config" - _ "dubbo.apache.org/dubbo-go/v3/imports" -) - -import ( - _ "${project-name}/dto" - _ "${project-name}/service" -) - -var ( - dubbo = &dubboComponent{} -) - -func init() { - registrySetup(dubbo) -} - -type dubboComponent struct { -} - -func (c *dubboComponent) Init() error { - initDubboService(func(err interface{}) { - if err != nil { - logger.Debug("Dubbo服务加载失败[5s后重试]") - time.Sleep(5 * time.Second) - _ = c.Init() - return - } - logger.Debug("Dubbo服务加载成功") - }) - return nil -} - -func initDubboService(hook func(interface{})) { - defer func() { - if err := recover(); err != nil { - hook(err) - } else { - hook(nil) - } - }() - _ = dubboConfig.Load() -} - -func (c *dubboComponent) Async() bool { - return true -} diff --git a/src/main/resources/project_template/empty_project/middleware/init.go1 b/src/main/resources/project_template/empty_project/middleware/init.go1 deleted file mode 100644 index be02d7f35c38605df54230e9eb4f9dc50f5cf7d2..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/middleware/init.go1 +++ /dev/null @@ -1,40 +0,0 @@ -package middleware - -import ( - "dubbo.apache.org/dubbo-go/v3/common/logger" -) - -var ( - setupComponents []SetupComponent -) - -type SetupComponent interface { - Init() error - - Async() bool -} - -func registrySetup(component SetupComponent) { - setupComponents = append(setupComponents, component) -} - -func Install() error { - var err error - for _, c := range setupComponents { - if c.Async() { - go func(c SetupComponent) { - e := c.Init() - if e != nil { - logger.Error(e) - } - }(c) - } else { - err = c.Init() - if err != nil { - logger.Error(err) - return err - } - } - } - return nil -} diff --git a/src/main/resources/project_template/empty_project/middleware/redis.go1 b/src/main/resources/project_template/empty_project/middleware/redis.go1 deleted file mode 100644 index 39a720dfbf334aded84000a468e00fa4cf839ca6..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/middleware/redis.go1 +++ /dev/null @@ -1,45 +0,0 @@ -package middleware - -import ( - "fmt" -) - -import ( - "github.com/go-redis/redis/v8" -) - -import ( - "${project-name}/component" - "${project-name}/config" - "${project-name}/util" -) - -var ( - rds = &redisComponent{} -) - -func init() { - registrySetup(rds) -} - -type redisComponent struct { -} - -func (c *redisComponent) Init() error { - rdConfig := config.Config.Redis - component.RedisComponent.Addr = fmt.Sprintf("%s:%s", rdConfig.Host, rdConfig.Port) - component.RedisComponent.Password = rdConfig.Password - component.RedisComponent.MaxRetries = rdConfig.MaxRetries - - component.RedisComponent.DbMap = make(map[int]*redis.Client) - - dbIndex := rdConfig.DefaultDB - defaultClient := util.NewRedisDb(component.RedisComponent.Addr, component.RedisComponent.Password, dbIndex, component.RedisComponent.MaxRetries) - component.RedisComponent.Redis = defaultClient - component.RedisComponent.DbMap[dbIndex] = defaultClient - return nil -} - -func (c *redisComponent) Async() bool { - return false -} diff --git a/src/main/resources/project_template/empty_project/middleware/router.go1 b/src/main/resources/project_template/empty_project/middleware/router.go1 deleted file mode 100644 index 5b9e32a790b1bab7e933c7594d16e7bc19719ef0..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/middleware/router.go1 +++ /dev/null @@ -1,49 +0,0 @@ -package middleware - -import ( - "fmt" -) - -import ( - "dubbo.apache.org/dubbo-go/v3/common/logger" - "github.com/gin-gonic/gin" -) - -import ( - "${project-name}/config" - "${project-name}/controller" -) - -var ( - router = &routerComponent{} -) - -func init() { - registrySetup(router) -} - -type routerComponent struct { - Router *gin.Engine -} - -func (c *routerComponent) Init() error { - routerEngine := gin.New() - - apiGroup := routerEngine.Group("/api") - apiGroup.GET("/ping/local", controller.ApiPingLocal) - apiGroup.GET("/ping/remote", controller.ApiPingRemote) - - serverConfig := config.Config.Server - err := routerEngine.Run(fmt.Sprintf("%s:%s", serverConfig.Host, serverConfig.Port)) - if err != nil { - logger.Error(err) - return err - } - - c.Router = routerEngine - return nil -} - -func (c *routerComponent) Async() bool { - return false -} diff --git a/src/main/resources/project_template/empty_project/mod b/src/main/resources/project_template/empty_project/mod index bb282fb909b69bf2478224e683ee5e588438ba7a..62fa868c34d4db6331114f5a5d03404cd013393b 100644 --- a/src/main/resources/project_template/empty_project/mod +++ b/src/main/resources/project_template/empty_project/mod @@ -2,13 +2,11 @@ module ${project-name} require ( dubbo.apache.org/dubbo-go/v3 v3.0.1 - github.com/apache/dubbo-go-hessian2 v1.11.0 - github.com/gin-gonic/gin v1.7.7 - github.com/go-redis/redis/v8 v8.11.4 - gopkg.in/yaml.v2 v2.4.0 - gorm.io/driver/clickhouse v0.3.1 - gorm.io/driver/mysql v1.3.2 - gorm.io/driver/postgres v1.3.1 - gorm.io/driver/sqlserver v1.3.1 - gorm.io/gorm v1.23.1 + ${database-mod-import} + gitee.com/changeden/dubbo-go-middleware-dubbo ${component-mod-import} + ${memory-cache-mod-import} + ${web-service-mod-import} + gitee.com/changeden/dubbo-go-starter ${component-mod-import} + github.com/apache/dubbo-go-hessian2 v1.11.0 + github.com/gin-gonic/gin v1.7.7 ) diff --git a/src/main/resources/project_template/empty_project/service/dubbo_api_ping.go1 b/src/main/resources/project_template/empty_project/service/dubbo_api_ping.go1 index d05af80de4fa14b7fbddb684be92c1a0e36dfd22..58ceb27fc245f85984667e52afd93f38f2a58279 100644 --- a/src/main/resources/project_template/empty_project/service/dubbo_api_ping.go1 +++ b/src/main/resources/project_template/empty_project/service/dubbo_api_ping.go1 @@ -2,15 +2,9 @@ package service import ( "context" - "fmt" -) - -import ( - "dubbo.apache.org/dubbo-go/v3/config" -) - -import ( "${project-name}/dto" + "dubbo.apache.org/dubbo-go/v3/config" + "fmt" ) var ApiPingService = &ApiPingConsumer{} diff --git a/src/main/resources/project_template/empty_project/util/redis_util.go1 b/src/main/resources/project_template/empty_project/util/redis_util.go1 deleted file mode 100644 index 873caba32a26be8a369cdd8366d81babb06ad932..0000000000000000000000000000000000000000 --- a/src/main/resources/project_template/empty_project/util/redis_util.go1 +++ /dev/null @@ -1,15 +0,0 @@ -package util - -import ( - "github.com/go-redis/redis/v8" -) - -func NewRedisDb(addr, password string, db, maxRetries int) *redis.Client { - client := redis.NewClient(&redis.Options{ - Addr: addr, - Password: password, - DB: db, - MaxRetries: maxRetries, - }) - return client -}