Everyone can develop projects independently, quickly and efficiently!
Spring-Boot-Plus是易于使用,快速,高效,功能丰富,开源的spring boot 脚手架.
前后端分离,专注于后端服务
每个人都可以独立、快速、高效地开发项目!
- 集成spring boot 常用开发组件集、公共配置、AOP日志等
- Maven多模块架构
- 集成mybatis plus快速dao操作
- 快速生成后台代码: entity/param/vo/controller/service/mapper/xml
- 集成Swagger/Knife4j,可自动生成api文档
- 集成jwt、shiro权限控制
- 集成Redis缓存
- 集成HikariCP连接池,JDBC性能和慢查询检测
- 集成spring boot admin,实时检测项目运行情况
- 使用assembly maven插件进行不同环境打包部署,包含启动、重启命令,配置文件提取到外部config目录
└── spring-boot-plus
├── admin SpringBootAdmin Server模块
├── bootstrap spring-boot-plus 启动模块
├── config 配置模块
├── distribution 打包模块
├── docs 文档目录
├── example 示例模块,自己的业务可新建多个模块处理
├── framework 框架核心模块
├── generator 代码生成模块
├── scheduled 任务调度模块
└── system 系统模块
中间件 | 版本 | 备注 |
---|---|---|
JDK | 1.8+ | JDK1.8及以上 |
MySQL | 5.7+ | 5.7及以上 |
Redis | 3.2+ |
技术 | 版本 | 备注 |
---|---|---|
Spring Boot | 2.2.0.RELEASE | 最新发布稳定版 |
Spring Framework | 5.2.0.RELEASE | 最新发布稳定版 |
Spring Boot Admin | 2.2.2 | 管理和监控SpringBoot应用程序 |
Mybatis | 3.5.3 | 持久层框架 |
Mybatis Plus | 3.3.1 | mybatis增强框架 |
HikariCP | 3.4.2 | 数据源 |
Fastjson | 1.2.67 | JSON处理工具集 |
Swagger2 | 2.9.2 | api文档生成工具 |
Knife4j | 2.0.2 | api文档生成工具 |
commons-lang3 | 3.9 | 常用工具包 |
commons-io | 2.6 | IO工具包 |
commons-codec | 1.14 | 加密解密等工具包 |
commons-collections4 | 4.4 | 集合工具包 |
reflections | 0.9.9 | 反射工具包 |
hibernate-validator | 6.0.18.Final | 后台参数校验注解 |
Shiro | 1.5.1 | 权限控制 |
JWT | 3.10.1 | JSON WEB TOKEN |
hutool-all | 5.2.4 | 常用工具集 |
lombok | 1.18.12 | 注解生成Java Bean等工具 |
mapstruct | 1.3.1.Final | 对象属性复制工具 |
git clone https://gitee.com/geekidea/spring-boot-plus.git
cd spring-boot-plus
默认使用dev环境,对应配置文件:application-dev.yml
mvn clean package -Pdev
-- ----------------------------
-- Table structure for foo_bar
-- ----------------------------
DROP TABLE IF EXISTS `foo_bar`;
CREATE TABLE `foo_bar`
(
`id` bigint(20) NOT NULL COMMENT '主键',
`name` varchar(20) NOT NULL COMMENT '名称',
`foo` varchar(20) DEFAULT NULL COMMENT 'Foo',
`bar` varchar(20) NOT NULL COMMENT 'Bar',
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
`state` int(11) NOT NULL DEFAULT '1' COMMENT '状态,0:禁用,1:启用',
`version` int(11) NOT NULL DEFAULT '0' COMMENT '版本',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT ='FooBar';
-- ----------------------------
-- Records of foo_bar
-- ----------------------------
INSERT INTO foo_bar (id, name, foo, bar, remark, state, version, create_time, update_time)
VALUES (1, 'FooBar', 'foo', 'bar', 'remark...', 1, 0, '2019-11-01 14:05:14', null);
INSERT INTO foo_bar (id, name, foo, bar, remark, state, version, create_time, update_time)
VALUES (2, 'HelloWorld', 'hello', 'world', null, 1, 0, '2019-11-01 14:05:14', null);
代码生成入口类,在generator模块中
spring-boot-plus/generator/src/main/java/io/geekidea/springbootplus/generator/SpringBootPlusGenerator.java
/**
* spring-boot-plus代码生成器入口类
*
* @author geekidea
* @date 2019-10-22
**/
@Component
public class SpringBootPlusGenerator {
/**
* 生成代码
* @param args
*/
public static void main(String[] args) {
GeneratorProperties generatorProperties = new GeneratorProperties();
// 设置基本信息
generatorProperties
.setMavenModuleName("example")
.setParentPackage("com.example")
.setModuleName("foobar")
.setAuthor("geekidea")
.setFileOverride(true);
// 设置表信息
generatorProperties.addTable("foo_bar","id");
// 数据源配置
generatorProperties.getDataSourceConfig()
.setDbType(DbType.MYSQL)
.setUsername("root")
.setPassword("root")
.setDriverName("com.mysql.jdbc.Driver")
.setUrl("jdbc:mysql://localhost:3306/spring_boot_plus?useUnicode=true&characterEncoding=UTF-8&useSSL=false");
// 生成配置
generatorProperties.getGeneratorConfig()
.setGeneratorStrategy(GeneratorStrategy.SINGLE)
.setGeneratorEntity(true)
.setGeneratorController(true)
.setGeneratorService(true)
.setGeneratorServiceImpl(true)
.setGeneratorMapper(true)
.setGeneratorMapperXml(true)
.setGeneratorPageParam(true)
.setGeneratorQueryVo(true)
.setRequiresPermissions(true)
.setPageListOrder(true)
.setParamValidation(true)
.setSwaggerTags(true)
.setOperationLog(true);
// 全局配置
generatorProperties.getMybatisPlusGeneratorConfig().getGlobalConfig()
.setOpen(true)
.setSwagger2(true)
.setIdType(IdType.AUTO)
.setDateType(DateType.ONLY_DATE);
// 策略配置
generatorProperties.getMybatisPlusGeneratorConfig().getStrategyConfig()
.setNaming(NamingStrategy.underline_to_camel)
.setColumnNaming(NamingStrategy.underline_to_camel)
.setEntityLombokModel(true)
.setRestControllerStyle(true)
.setControllerMappingHyphenStyle(true)
.setVersionFieldName(GeneratorConstant.VERSION)
.setLogicDeleteFieldName(GeneratorConstant.DELETED);
// 生成代码
CodeGenerator codeGenerator = new CodeGenerator();
codeGenerator.generator(generatorProperties);
}
}
使用Velocity模版生成代码,可自定义修改代码生成模版
spring-boot-plus/generator/src/main/resources
└── templates
├── controller.java.vm 控制器代码生成模版
├── entity.java.vm 实体类代码生成模版
├── mapper.java.vm mapper代码生成模版
├── mapper.xml.vm mapper xml 代码生成模版
├── pageParam.java.vm 分页参数代码生成模版
├── queryVo.java.vm 查询结果代码生成模版
├── service.java.vm 服务接口代码生成模版
└── serviceImpl.java.vm 服务实现代码生成模版
└── src
└── main
├── java
│ └── com
│ └── example
│ └── foobar
│ ├── controller
│ │ └── FooBarController.java
│ ├── entity
│ │ └── FooBar.java
│ ├── mapper
│ │ └── FooBarMapper.java
│ ├── param
│ │ └── FooBarPageParam.java
│ ├── service
│ │ ├── FooBarService.java
│ │ └── impl
│ │ └── FooBarServiceImpl.java
│ └── vo
│ └── FooBarQueryVo.java
└── resources
└── mapper
└── foobar
└── FooBarMapper.xml
SpringBootAdmin Server启动类,在admin模块中 http://localhost:8000
spring-boot-plus/admin/src/main/java/io/geekidea/springbootplus/admin/SpringBootPlusAdminApplication
/**
* Spring Boot Admin Bootstrap Main Class
*
* @author geekidea
* @date 2020/3/20
**/
@Slf4j
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
@SpringBootApplication
public class SpringBootPlusAdminApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringBootPlusAdminApplication.class, args);
ConfigurableEnvironment environment = context.getEnvironment();
String serverPort = environment.getProperty("server.port");
log.info("SpringBootAdmin: http://localhost:" + serverPort);
}
}
项目入口类,在bootstrap模块中 http://localhost:8888
spring-boot-plus/bootstrap/src/main/java/io/geekidea/springbootplus/SpringBootPlusApplication.java
/**
* spring-boot-plus 项目启动入口
*
* @author geekidea
* @since 2018-11-08
*/
@EnableAsync
@EnableScheduling
@EnableTransactionManagement
@EnableConfigurationProperties
@ServletComponentScan
@MapperScan({"io.geekidea.springbootplus.**.mapper", "com.example.**.mapper"})
@SpringBootApplication(scanBasePackages = {"io.geekidea.springbootplus", "com.example"})
public class SpringBootPlusApplication {
public static void main(String[] args) {
// 启动spring-boot-plus
ConfigurableApplicationContext context = SpringApplication.run(SpringBootPlusApplication.class, args);
// 打印项目信息
PrintApplicationInfo.print(context);
// 打印项目提示
PrintApplicationInfo.printTip(context);
}
}
http://47.105.159.10:8888/api/swagger-ui.html
http://47.105.159.10:8888/api/doc.html
安装
jdk
,git
,maven
,redis
,mysql
wget -O download-install-all.sh https://springboot.plus/bin/download-install-all.sh
sh download-install-all.sh
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Springbootplus666!';
exit
mysql -uroot -pSpringbootplus666!
create database if not exists spring_boot_plus character set utf8mb4;
use spring_boot_plus;
source /root/mysql_spring_boot_plus.sql;
show tables;
exit
wget -O deploy.sh https://springboot.plus/bin/deploy.sh
sh deploy.sh
tail -f -n 1000 /spring-boot-plus-server-2.0/logs/spring-boot-plus.log
QQ 625301326 | 微信公众号 geekideaio | 今日头条 GeekIdea |
---|---|---|
请作者喝咖啡,让代码飞一会儿!
spring-boot-plus is under the Apache 2.0 license. See the LICENSE file for details.