Java中轻量级规则引擎Groovy介绍

这篇具有很好参考价值的文章主要介绍了Java中轻量级规则引擎Groovy介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、场景描述

假如在开发一个充值功能,需要支持经常变化的充值营销活动,产品提出了以下需求:

1、根据不同季节,不同节日做不同的充值送活动,以及不定期的优惠活动。

2、还需要根据用户的等级以及用户以往的充值历史做不同的营销活动。

3、能够灵活的配置营销活动

需求很简单就是需要研发能够灵活的满足各种不同的营销活动配置,该如何实现了?目前大致有以下几种方式:

1、每次营销活动的调整,通过代码的调整,测试成功后发布。

2、通过数据库提前想好各种可能的营销活动规则,把营销活动规则存放在数据库中。此种方式能够满足绝大多数需求,但是如果是新的营销规则或者是之前没有的计算规则,则需要进行代码调整,测试成功后发布。

3、使用规则引擎,把每次营销活动的规则,通过脚本来计算,并输出计算结果返回给程序。只要提前规范好规则引擎计算脚本的入参和出参等,即可在不修改程序代码,无需重新发布程序的情况下配置营销活动。

要实现灵活的营销策略配置,最佳选择肯定是规则引擎

Java中有很多不同类型的规则引擎,免费的收费的,轻量级的重量级的,今天就给大家介绍一个免费的轻量级的规则引擎,并且规则脚本直接可以在java代码中运行,非常方便,即插即用,名字就叫做:groovy

二、Groovy简介

  1. 动态性:单纯的java语言是不具有动态性的,groovy恰恰弥补了这一缺憾,有了groovy你可以在程序运行时任意修改代码逻辑,不需要重新发布;
  2. 脚本简单易用:groovy在语法上兼具java 语言和脚本语言特点,大大简化了语法,有丰富的语法,对于Java开发者非常友好;
  3. 与Java兼容性强:可以无缝衔接Java代码,可以调用Java所有的库。可以在Groovy脚本中使用Java代码,兼容率高达90%,除了lambda、数组语法,其他Java语法基本都能兼容;
  4. 技术成熟,功能强大,易于使用维护,性能稳定;

三、Groovy与Java的集成

Java中运行Groovy,有三个比较常用的类支持:GroovyClassLoader、GroovyShell和GroovyScriptEngine

GroovyClassLoader
用 Groovy 的 GroovyClassLoader ,它会动态地加载一个脚本并执行它。GroovyClassLoader是一个Groovy定制的类装载器,负责加载解析Groovy脚本类。

GroovyShell
GroovyShell允许在Java类中(甚至Groovy类)求任意Groovy表达式的值。您可使用Binding对象输入参数给表达式,并最终通过GroovyShell返回Groovy表达式的计算结果。

GroovyScriptEngine
GroovyShell多用于推求对立的脚本或表达式,如果换成相互关联的多个脚本,使用GroovyScriptEngine会更好些。GroovyScriptEngine从您指定的位置(文件系统,URL,数据库,等等)加载Groovy脚本,并且随着脚本变化而重新加载它们。

Maven的pom依赖

<dependency>
    <artifactId>groovy</artifactId>
	<groupId>org.codehaus.groovy</groupId>
	<version>2.5.8</version>
	<scope>compile</scope>
</dependency>

GroovyShell为例来介绍java代码与groovy脚本的集成

1、简单的表达式执行,向script中传递参数

2、获取script内部定义的变量值

3、获取script中方法执行结果的返回值

public static void main(String[] args) throws Exception {
		
		Binding binding = new Binding();  
	    GroovyShell shell = new GroovyShell(binding);  
	      
	    //向script中传递变量  
	    binding.setVariable("name", "Groovy");  
	    shell.evaluate("println 'Hello World! I am ' + name;");  
	    
	    //获取script内部定义变量值
	    shell.evaluate("date = new Date();");  
	    Date date = (Date)binding.getVariable("date");  
	    System.out.println("Date:" + date.getTime());  
	    
	    //获取script脚本执行返回值
	    binding.setVariable("list", new String[]{"A","B","C"});  
	    String joinString = (String)shell.evaluate("def call(){return list.join(' - ')};call();");  
	    System.out.println("Array join:" + joinString);  
	      
	    shell = null;  
	    binding = null;  
		
}

实际运用中,都会把活动的计算规则采用脚本script的方式,灵活设置,并把脚本存放中数据库中。文章来源地址https://www.toymoban.com/news/detail-685299.html

到了这里,关于Java中轻量级规则引擎Groovy介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Lightly —— Java轻量级在线编译器

    Lightly,一款轻量级在线集成开发工具(IDE)。 Lightly,支持客户端和云端在线开发模式。 Lightly,支持项目实时协作、共同开发。 初始界面——引导          了解Lightly IDE提供多种语言的项目编译环境以及数据库云端存储,其为两大重要特性。 支持的语言编译环境(13):

    2024年04月27日
    浏览(24)
  • 《Java Web轻量级整合开发入门》学习笔记

    轻量级Java Web整合开发 第一章 轻量级Java Web开发概述 1.2  java web 开发概述 1.JSP是一种编译执行的前台页面技术。对于每个JSP页面,Web服务器都会生成一个相应的Java文件,然后再编译该Java文件,生成相应的Class类型文件。在客户端访问到的JSP页面,就是相应Class文件执行的结果

    2024年02月08日
    浏览(38)
  • 架构:Oracle推出开源轻量级Java微服务框架Helidon

    在当今数字化时代,微服务架构已经成为构建灵活、可伸缩和高度可维护的应用程序的首选方式之一。Java一直以其稳定性和跨平台性而闻名,而Oracle则一直是Java的领先开发者之一。为了满足不断增长的微服务市场需求,Oracle于近年推出了开源的轻量级Java微服务框架Helidon,为

    2024年02月02日
    浏览(41)
  • springboot整合MeiliSearch轻量级搜索引擎

    一、Meilisearch与Easy Search点击进入官网了解,本文主要从小微型公司业务出发,选择meilisearch来作为项目的全文搜索引擎,还可以当成来mongodb来使用。 二、starter封装 1、项目结构展示 2、引入依赖包(我是有包统一管理的fastjson用的1.2.83,gson用的2.8.6) 3、yml参数读取代码参考

    2024年02月08日
    浏览(34)
  • 开箱即用轻量级雪花算法id生成器Java工具类

    在 Java后端研发过程中,对于分布式微服务来说,一般需要分布式 id生成. 这里分享一个非常好用且大多数情况下都可用的开箱即用轻量级雪花算法id生成器Java工具类。 这种方式生成的雪花算法生成器生成的唯一主键id,好处是不依赖第三方组件,轻量级,缺点是服务器的时钟

    2024年02月07日
    浏览(31)
  • Orillusion引擎正式开源!AIGC时代下的WebGPU轻量级3D渲染引擎!

    开源生态的建设根植于社区,开发者在社区共享、共创、共赢,将会激发出无限的创造力,这就是开源最大的魅力! 选择开源,源于我们坚信,“独行快,众行远”! WebGPU经过六年的时间,终于在2023年4月6日,由Chrome团队发布。5月2号,在Chrome113版本上,WebGPU被默认启动。

    2024年02月11日
    浏览(33)
  • 教你使用PHP实现一个轻量级HTML模板引擎

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。多年电商行业从业经验,对系统架构,数据分析处理等大规模应用场景有丰富经验。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🏆另有专栏PHP入门基础教程,希望各位大佬多多支持❤️。 在 W

    2024年02月15日
    浏览(29)
  • ioGame21发布,史诗级增强,Java Netty 轻量级网络游戏服务器框架

    标题:ioGame21 发布:史诗级增强,Java Netty 轻量级网络游戏服务器框架 引言 近日,一款名为 ioGame21 的轻量级网络游戏服务器框架在 GitHub 上正式发布。这款框架基于 Java Netty 构建,具有高性能、高可扩展性和易于使用的特点。ioGame21 的发布将为游戏开发者提供一个强大的工

    2024年02月19日
    浏览(39)
  • Ip-Limit: Java轻量级注解式IP限流(黑名单/白名单)组件【一】

    基于JVM缓存的轻量级、注解式IP限流组件,方便项目快速引用,满足多线程场景。 默认为滑动窗口限流器,内置令牌桶限流器,可通过注解的属性配置修改 项目Github地址: https://github.com/DDAaTao/ip-limiter 项目Gitee地址:https://gitee.com/fanwentaomayun/ip-limiter 使用样例 包含较为详细的

    2024年02月13日
    浏览(30)
  • 告别if else!试试这款轻量级流程引擎吧,跟SpringBoot绝配!

    之前同事用了一款轻量级的规则引擎脚本 AviatorScript ,我也跟着用了起来,真的挺香,能少写很多代码。这期就给大家介绍一下这款规则引擎。 AviatorScript 是一门高性能、轻量级寄宿于 JVM (包括 Android 平台)之上的脚本语言。 它起源于2010年,作者对当时已有的一些产品不是

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包