{"id":20420335,"url":"https://github.com/deepraining/spring-boot-starter","last_synced_at":"2025-07-27T04:36:07.883Z","repository":{"id":57407007,"uuid":"196902250","full_name":"deepraining/spring-boot-starter","owner":"deepraining","description":"用于快速创建 Spring Boot 应用的模板脚手架，使用 Gradle 构建项目。","archived":false,"fork":false,"pushed_at":"2025-01-16T01:33:19.000Z","size":891,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T18:09:00.313Z","etag":null,"topics":["boilerplate","checkstyle","flyway","gradle","mybatis","spring","spring-boot","spring-mvc","starter","swagger"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deepraining.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-07-15T01:26:29.000Z","updated_at":"2025-01-16T01:33:21.000Z","dependencies_parsed_at":"2024-08-26T08:25:24.578Z","dependency_job_id":"4a68e94a-3217-48ad-b83f-b7adb35545fd","html_url":"https://github.com/deepraining/spring-boot-starter","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/deepraining/spring-boot-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepraining%2Fspring-boot-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepraining%2Fspring-boot-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepraining%2Fspring-boot-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepraining%2Fspring-boot-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deepraining","download_url":"https://codeload.github.com/deepraining/spring-boot-starter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deepraining%2Fspring-boot-starter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267300016,"owners_count":24066086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate","checkstyle","flyway","gradle","mybatis","spring","spring-boot","spring-mvc","starter","swagger"],"created_at":"2024-11-15T06:42:30.412Z","updated_at":"2025-07-27T04:36:07.853Z","avatar_url":"https://github.com/deepraining.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# spring-boot-starter\n\n用于快速创建 [Spring Boot](https://spring.io/projects/spring-boot) 应用的模板脚手架，使用 [Gradle](https://gradle.org/) 构建项目。\n\n以 [mybatis-plus](https://github.com/baomidou/mybatis-plus) 作为数据库驱动层，请查看 [spring-boot-starter v2](https://github.com/deepraining/spring-boot-starter2)\n\n## 特性\n\n- 使用 [Gradle](https://gradle.org/) 构建整个项目\n- 多项目模式，可以根据需要自行添加多个子项目\n- 使用 [CheckStyle](https://checkstyle.org/) 检查 Java 代码规范，使用 [google-java-format](https://github.com/google/google-java-format) 优化 Java 代码格式\n- 使用 [Git pre-commit hook](./config/hooks) 在 `git commit` 之前对代码预检，如果有不符合规范的代码，将不予提交\n- 使用 [Flyway](https://flywaydb.org/) 进行数据库版本化管理\n- 前后端完全分离，本项目将只用于写后端 Java 代码，前端代码需要另外建立一个项目\n- 使用 [Mybatis](https://www.mybatis.org/) 作为数据库链接层，使用 [Mybatis Generator](http://www.mybatis.org/generator/) 自动生成模型文件\n- 深度整合 [Swagger](https://swagger.io/)，便于生成 API 接口文档和数据 Mock 服务\n- 使用 [snowflake](https://github.com/twitter-archive/snowflake) 算法生成分布式唯一 ID\n- 支持 [docker](https://www.docker.com/) 部署\n\n## 子项目\n\n- `pro-common`: 通用代码\n- `pro-mbg`: Mybatis Generator，用于自动生成 MyBatis 数据库模型与字段映射\n- `pro-admin`: 使用 JWT 保持登陆状态的后台管理应用，包括基于角色的访问控制（RBAC），示例前端项目 [sbs-admin-web](https://github.com/deepraining/sbs-admin-web)\n- `pro-front`: 使用 Session-Cookie 保持登陆状态的前端应用\n- `pro-search`: 使用 [ElasticSearch](https://www.elastic.co/) 来做文本搜索引擎\n- `pro-wx`: 微信登录相关示例项目\n- `pro-rws`: 数据库读写分离示例项目\n- `pro-mdb`: 多数据库、跨库读写示例项目\n- `pro-amqp`: 异步消息队列(`RabbitMQ`)示例项目\n- `pro-proto`: 使用 [protobuf](https://github.com/protocolbuffers/protobuf) 作为API数据交互格式，替代常用的 `json`\n- `pro-protogen`: 从 MySql 数据库中的生成表对应的 `proto` 文件\n- `pro-war`: 去掉 Embed Tomcat，部署到外部的 Tomcat 容器中(以 `pro-front` 项目代码为主)\n- `pro-cli`: 跟普通命令行程序一样，运行一次就结束（如定时任务）\n\n## 扩展 Gradle Tasks\n\n### checkJava\n\n用于检查整个项目的 Java 代码是否符合规范\n\n```\n./gradlew checkJava \n```\n\n### pro-*:watchJava\n\n本地开发时，用于监听 Java 文件变动，然后自动编译到 `build` 目录下（有些集成开发工具已经自带这个功能），自动刷新应用\n\n(配合 `spring-boot-devtools` 一起用)\n\n```\n./gradlew pro-*:watchJava -t\n```\n\n## 创建项目\n\n克隆代码，然后根据需要调整项目与代码\n\n```\ngit clone https://github.com/deepraining/spring-boot-starter.git yourProName --depth=1\n\ncd yourProName\n```\n\n去掉原有的 Git 信息，并重新初始化\n\n```\nrm -rf .git\n\ngit init\n```\n\n创建数据库与表结构（数据表文件在 `sql` 目录下，可以自行修改）\n\n```\n# 本地环境：默认 flyway.conf 配置文件\nflyway migrate\n\n# 线上环境\nflyway migrate -configFiles=flyway-prod.conf\n\n# 如果你需要配置更多的环境，可以自己添加\n```\n\n执行自动生成 `Mybatis` 模型文件的命令\n\n```\n./gradlew pro-mbg:run\n```\n\n## 运行项目\n\n以 `pro-admin` 为例:\n\n执行本地开发调试 `pro-admin` 子项目的命令，然后在浏览器中打开 `http://127.0.0.1:9000`\n\n```\n./gradlew pro-admin:bootRun\n```\n\n如果集成开发工具不支持监听 Java 文件变动并自动编译的功能，可以运行下面的命令\n\n```\n./gradlew pro-admin:watchJava -t\n```\n\n开发完毕之后执行构建(可以使用 shell 脚本把已经构建好的 html 文件复制到 `resources/templates` 目录下)\n\n```\n./gradlew pro-admin:build\n```\n\n## 部署项目\n\n以 `pro-admin` 为例:\n\n在服务器上，找个合适的地方创建 `serverDirName` 目录（`serverDirName` 为使用者自定义目录）\n\n把本地 `pro-admin/build/libs/*.jar, bin/*.sh` 上传到 `serverDirName` 目录，并按实际需要修改 `run.sh, select.sh` 中 `SERVER_ENV` 与 `ARCHIVE_NAME` 变量的值\n\n```\n- serverDirName/\n  - run.sh              # 运行、停止、重启、查看程序\n  - select.sh           # 运行最新版本的 jar 文件\n  - libs\n    - sbs-admin-2020.0501.1001.jar\n    - sbs-admin-2020.0501.1101.jar\n    - ...\n```\n\n```\ncd serverDirName\n\nsh run.sh start        # 运行程序\nsh run.sh stop         # 停止程序\nsh run.sh restart      # 重启程序\nsh run.sh status       # 查看程序状态\nsh run.sh version      # 查看程序版本\n```\n\n## 前端与后端分开部署(html 文件不打包进 jar 文件)\n\n`application.yml`: \n\n```\nspring:\n+ thymeleaf:\n+   prefix: file:./templates/\n+   cache: false\n```\n\n## 配置文件与 jar 文件分开部署(yml 文件不打包进 jar 文件)\n\n你可以把配置文件部署到 `~/.sbs-admin/application*.yml`，就可以覆盖 `src/main/resources/application*.yml` 的配置\n\n## Docker 部署\n\n参看 [pro-admin Dockerfile](./pro-admin/Dockerfile)\n\n## 打包 war 并部署到外部 Tomcat 中\n\n#### 1. `build.gradle` 添加 `war` 插件\n\n```\nplugins {\n  id 'war'\n}\n```\n\n#### 2. `build.gradle` 设置 Embed Tomcat 打包排除\n\n```\ndependencies {\n  providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat:2.1.4.RELEASE'\n}\n``` \n\n默认情况下，使用 `java -jar xxx.jar` 命令运行的项目是用的 Embed Tomcat。如果是打包成 war，内部结构是\n\n```\n- META-INF\n  - MANIFEST.MF\n- org\n  - springframework\n    - ...\n- WEB-INF\n  - classes\n  - lib\n    - ...\n    - tomcat-embed-core-9.0.17.jar\n    - tomcat-embed-el-9.0.17.jar\n    - tomcat-embed-websocket-9.0.17.jar\n```\n\n而设置了 `providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat:2.1.4.RELEASE'` 排除 Embed Tomcat 后，打包成 war，内部结构就变成\n\n```\n- META-INF\n  - MANIFEST.MF\n- org\n  - springframework\n    - ...\n- WEB-INF\n  - classes\n  - lib\n    - ...\n  - lib-provided\n    - tomcat-embed-core-9.0.17.jar\n    - tomcat-embed-el-9.0.17.jar\n    - tomcat-embed-websocket-9.0.17.jar\n```\n\n`lib-provided` 目录下的 Embed Tomcat 运行时是不会加载的，由外部 Tomcat 代替\n\n另外，需要在 `application.yml` 中设置\n\n```\nspring:\n  jmx:\n    enabled: false\n```\n\n#### 3. 在 Tomcat 根目录下新建 apps 目录\n\n```\n- bin\n- conf\n- lib\n- webapps\n- ...\n\n- apps\n```\n\n主要是与 `webapps` 分开管理\n\n#### 4. 添加虚拟主机配置（以 `sbs-front` 为例）\n\n把 war 文件添加到 apps 目录下\n\n```\n- apps\n  - sbs-front.war\n```\n\n`conf/server.xml` 添加\n\n```\n......\n      \u003cHost name=\"www.example.com\"  appBase=\"apps\"\n            unpackWARs=\"true\" autoDeploy=\"true\"\u003e\n\n        \u003cContext path=\"\" docBase=\"sbs-front\" reloadable=\"true\"/\u003e\n\n        \u003cValve className=\"org.apache.catalina.valves.AccessLogValve\" directory=\"logs\"\n               prefix=\"www.example.com_access_log\" suffix=\".txt\"\n               pattern=\"%h %l %u %t \u0026quot;%r\u0026quot; %s %b\" /\u003e\n\n      \u003c/Host\u003e\n......\n```\n\n运行或重启 Tomcat 就可以访问 `www.example.com` 了\n\n#### 其他事项\n\n1. `pro-war` 项目只在 Tomcat8 中测试，其他版本没试过\n1. 打包 war 文件可用 `./gradlew pro-war:bootWar` 命令\n\n## 注意\n\n- 使用 `pro-search` 时，ElasticSearch 服务器与客户端版本最好严格一致，本项目的客户端版本是 `v6.4.3`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeepraining%2Fspring-boot-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeepraining%2Fspring-boot-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeepraining%2Fspring-boot-starter/lists"}