开源项目Springboot_v2真香系列
- 2020 年 3 月 11 日
- 筆記
之前找过很多开源项目,用于生成代码,和权限管理,但功能全的需要付费,小功能的项目又不实用,这次的开源项目,功能十分强大,且拿来即用。
介绍
SpringBoot_v2项目是努力打造springboot框架的极致细腻的脚手架。原生纯净,可在线生成controller、mapperxml、dao、service、html、sql代码,极大减少开发难度,增加开发进度神器脚手架!!不求回报,你使用快乐就是这个项目最大的快乐!后台管理包含代码生成器
UI页面

除了代码生成器,还有表单构建,系统监控,定时任务
技术应用
技术 |
名称 |
官网 |
备注 |
---|---|---|---|
springboot |
springboot框架 |
|
|
Apache Shiro |
权限框架 |
|
|
MyBatis Generator |
代码生成 |
|
|
PageHelper |
MyBatis物理分页插件 |
|
|
hikari |
数据库连接池 |
|
|
Thymeleaf |
模板引擎 |
|
|
Log4J |
日志组件 |
|
|
Swagger2 |
接口测试框架 |
|
|
Maven |
项目构建管理 |
|
|
Websocket |
websocket消息通知 |
|
|
velocity |
模板引擎 |
|
|
kaptcha |
google验证码 |
|
|
devtools |
热部署 |
|
|
GSON |
谷歌json |
|
|
druid |
阿里连接池 |
|
|
quartz |
定时框架 |
|
|
部署
1.导入doc文件夹里面的springbootv2.sql到数据库
注意:由于数据库设置问题,个人进行导入会出现乱码,导致前端页面乱码,非编码
2.确认自己的mysql版本 进行修改jar 在pom.xml 73-84行
Select@@version
3.修改application-dev.yml 里面自己数据库版本对应的jdbc链接
4.正常启动run SpringbootStart.java
生成代码
@GetMapping("/one") @RequiresPermissions("system:autocode:one") public String one(ModelMap model) { String str="单表代码生成"; setTitle(model, new TitleVo("生成", str+"管理", true,"欢迎进入"+str+"页面", true, false)); //查询表名 引擎 List<TsysTables> tables=generatorService.queryList(null); //查询表对应权限 List<TsysPermission> permissions= sysPermissionService.list2(null) ; model.addAttribute("tables", tables); model.addAttribute("permissions", permissions); return prefix + "/one"; } @PostMapping("/saveOne") @ResponseBody public AjaxResult saveOne(String allColumnss,String tableName,String conditionQueryField,String pid,int sqlcheck) throws Exception{ JSONArray array= JSONUtil.parseArray(allColumnss); //遗留可用前端修改传入的字段等信息(未完善) List<BeanColumn> beanColumns2=JSONUtil.toList(array, BeanColumn.class); List<TsysTables> list= generatorService.queryList(tableName); if(list.size()>0) { TsysTables tables=list.get(0); List<BeanColumn> beanColumns= generatorService.queryColumns2(tableName); AutoCodeUtil.autoCodeOneModel(sysUtilService,tables, beanColumns,conditionQueryField,pid,sqlcheck); } return AjaxResult.success(); } autoCodeOneModel方法 public static void autoCodeOneModel(SysUtilService sysUtilService,TsysTables tables,List<BeanColumn> beanColumns,String conditionQueryField,String pid,int sqlcheck){ //设置velocity资源加载器 Properties prop = new Properties(); prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" ); Velocity.init(prop); GlobalConfig globalConfig= AutoCodeConfig.getGlobalConfig(); Map<String, Object> map = new HashMap<>(); //数据库表数据 map.put("TsysTables",tables); //字段集合 map.put("beanColumns",beanColumns); //配置文件 map.put("globalConfig",globalConfig); map.put("datetime",new DateTime()); map.put("pid",pid); map.put("sqlcheck",sqlcheck); map.put("conditionQueryField",conditionQueryField); map.put("conditionQueryField_a",com.fc.test.util.StringUtils.firstLowerCase(conditionQueryField)); map.put("SnowflakeIdWorker", SnowflakeIdWorker.class); //需要导入的java类 map.put("JavaClassPackages", getJavaClassPackage(beanColumns)); VelocityContext context = new VelocityContext(map); //获取模板列表 List<String> templates = getTemplates(); for (String template : templates) { try { if(template.contains("menu.sql.vm")) { if(sqlcheck==1) {//执行sql Template tpl = Velocity.getTemplate(template, "UTF-8" ); StringWriter sw = new StringWriter(); tpl.merge(context, sw); System.out.println(sw); executeSQL(sysUtilService, sw.toString()); }else {//只输出 Template tpl = Velocity.getTemplate(template, "UTF-8" ); StringWriter sw = new StringWriter(); tpl.merge(context, sw); System.out.println(sw); } }else { String filepath=getCoverFileName(template,tables.getTableModel_a() ,tables.getTableModel(),globalConfig.getParentPack() , "model","gen"); Template tpl = Velocity.getTemplate(template, "UTF-8" ); File file = new File(filepath); if (!file.getParentFile().exists()) file.getParentFile().mkdirs(); if (!file.exists()) file.createNewFile(); try (FileOutputStream outStream = new FileOutputStream(file); OutputStreamWriter writer = new OutputStreamWriter(outStream, "UTF-8"); BufferedWriter sw = new BufferedWriter(writer)) { tpl.merge(context, sw); sw.flush(); System.out.println("成功生成Java文件:" + filepath); } } } catch (IOException e) { try { throw new Exception("渲染模板失败,表名:" +tables.getTableName()+"n"+e.getMessage()); } catch (Exception e1) { e1.printStackTrace(); } } } } 其中VelocityContext非常类似hashtable 是上面提到的velocity语法 GlobalConfig用于自动生成配置文件类
登录页面

表单构建

左侧功能区域拖动到右侧生成HTML代码

系统监控

代码实现
this.jvmSpecInfo=SystemUtil.getJvmSpecInfo(); //取得Java Virtual Machine Implementation的信息 this.jvmInfo=SystemUtil.getJvmInfo(); //取得Java Specification的信息 this.javaSpecInfo=SystemUtil.getJavaSpecInfo(); //取得Java Implementation的信息 this.javaInfo=SystemUtil.getJavaInfo(); //取得当前运行的JRE的信息 this.javaRuntimeInfo=SystemUtil.getJavaRuntimeInfo(); //取得OS的信息 this.osInfo=SystemUtil.getOsInfo(); //取得User的信息 this.userInfo=SystemUtil.getUserInfo(); //取得Runtime的信息 this.runtimeInfo=SystemUtil.getRuntimeInfo(); //取得Host的信息 this.hostInfo=SystemUtil.getHostInfo(); //JDK启动时间 this.startTime=getStartTime(); //JDK运行时间 this.runTime=getRunTime(); //获得JVM最大内存 this.maxMemory = FileUtil.readableFileSize(SystemUtil.getRuntimeInfo().getMaxMemory()); //获得JVM已分配内存 this.totalMemory = FileUtil.readableFileSize(SystemUtil.getRuntimeInfo().getTotalMemory()); //获得JVM已分配内存中的剩余空间 this.freeMemory = FileUtil.readableFileSize(SystemUtil.getRuntimeInfo().getFreeMemory()); //JVM最大可用内存 this.usableMemory = FileUtil.readableFileSize(SystemUtil.getRuntimeInfo().getUsableMemory());
雪花算法生成分布式ID
/** * Twitter_Snowflake<br> * SnowFlake的结构如下(每部分用-分开):<br> * 0 – 0000000000 0000000000 0000000000 0000000000 0 – 00000 – 00000 – 000000000000 <br> * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0<br> * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 – 开始时间截) * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br> * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId<br> * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号<br> * 加起来刚好64位,为一个Long型。<br> * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。 */
还有这个天气预报小插件挺有意思

项目地址
https://gitee.com/bdj/SpringBoot_v2
