前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源项目Springboot_v2真香系列

开源项目Springboot_v2真香系列

作者头像
疯狂的KK
发布2020-03-11 10:29:24
9820
发布2020-03-11 10:29:24
举报
文章被收录于专栏:Java项目实战

之前找过很多开源项目,用于生成代码,和权限管理,但功能全的需要付费,小功能的项目又不实用,这次的开源项目,功能十分强大,且拿来即用。

介绍

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

生成代码

代码语言:javascript
复制
@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代码

系统监控

代码实现

代码语言:javascript
复制
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左右。 */

还有这个天气预报小插件挺有意思

项目地址

代码语言:javascript
复制
https://gitee.com/bdj/SpringBoot_v2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 赵KK日常技术记录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档