{"id":25806016,"url":"https://github.com/alipsa/renjin-spring-boot-starter","last_synced_at":"2026-05-10T16:32:29.930Z","repository":{"id":57742880,"uuid":"304438008","full_name":"Alipsa/renjin-spring-boot-starter","owner":"Alipsa","description":"A spring boot starter to run Renjin R code in a spring boot app","archived":false,"fork":false,"pushed_at":"2023-08-13T18:59:37.000Z","size":28,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-01T11:27:03.119Z","etag":null,"topics":["renjin","spring-boot"],"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/Alipsa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["Alipsa"]}},"created_at":"2020-10-15T20:14:53.000Z","updated_at":"2024-05-01T11:27:03.120Z","dependencies_parsed_at":"2022-09-11T09:41:22.949Z","dependency_job_id":null,"html_url":"https://github.com/Alipsa/renjin-spring-boot-starter","commit_stats":null,"previous_names":["pernyfelt/renjin-spring-boot-starter"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alipsa%2Frenjin-spring-boot-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alipsa%2Frenjin-spring-boot-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alipsa%2Frenjin-spring-boot-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alipsa%2Frenjin-spring-boot-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alipsa","download_url":"https://codeload.github.com/Alipsa/renjin-spring-boot-starter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241052529,"owners_count":19901043,"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","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":["renjin","spring-boot"],"created_at":"2025-02-27T19:52:40.493Z","updated_at":"2026-05-10T16:32:29.878Z","avatar_url":"https://github.com/Alipsa.png","language":"Java","funding_links":["https://github.com/sponsors/Alipsa"],"categories":[],"sub_categories":[],"readme":"# renjin-spring-boot-starter\nA spring boot starter to run Renjin R code in a spring boot app\n\nTo use it, add the following dependency to your pom.xml\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ese.alipsa\u003c/groupId\u003e\n    \u003cartifactId\u003erenjin-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nThen, in your spring boot application, you can wire in the ScriptEngine\nto execute R code. E.g. (very simplified)\n\nImport the RenjinStarterAutoConfig in one of your configuration beans:\n```java\npackage my.springapp;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Import;\nimport se.alipsa.renjin.starter.RenjinStarterAutoConfig;\n\n@Configuration\n@Import(RenjinStarterAutoConfig.class)\npublic class BeanConfig {\n  // Your other beans goes here...\n}\n```\n\nNow you can just autowire a RenjinScriptEngine in your\nservice(s), e.g:\n\n```java\npackage my.springapp;\n\nimport org.renjin.script.RenjinScriptEngine;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport javax.script.ScriptException;\nimport java.io.IOException;\n\n@Service\npublic class AnalysisEngine {\n\n  private final RenjinScriptEngine scriptEngine;\n\n  @Autowired\n  public AnalysisEngine(RenjinScriptEngine scriptEngine) {\n    this.scriptEngine = scriptEngine;\n  }\n  \n  public SEXP runScript(String script) throws ScriptException {\n    return (SEXP)scriptEngine.eval(script);\n  }\n}\n```\nSince any executions in the same session share data (e.g. variables in the global environment),\nin some cases you need to have a new Session for every script invocation. \nAs session creation is a bit expensive, there is an Object pool of Script Engines \nwith a unique session for each that you can use as follows:\n\n```java\nimport org.renjin.script.RenjinScriptEngine;\nimport org.renjin.sexp.SEXP;\nimport org.springframework.beans.factory.annotation.Autowired;;\nimport org.springframework.stereotype.Service;\nimport se.alipsa.renjin.starter.RenjinSessionEnginePool;\nimport java.util.Map;\n\n@Service\npublic class ReportEngine {\n  private final RenjinSessionEnginePool renjinSessionEnginePool;\n\n  @Autowired\n  public ReportEngine(RenjinSessionEnginePool renjinSessionEnginePool) {\n    this.renjinSessionEnginePool = renjinSessionEnginePool;\n  }\n\n  private SEXP runScript(String script, Map\u003cString, Object\u003e params) throws Exception {\n    RenjinScriptEngine scriptEngine = null;\n    try {\n      scriptEngine = renjinSessionEnginePool.borrowObject();\n      params.forEach(scriptEngine::put);\n      return (SEXP) scriptEngine.eval(script);\n    } finally {\n      if (scriptEngine != null) {\n        renjinSessionEnginePool.returnObject(scriptEngine);\n      }\n    }\n  }\n}\n```\nNote: When the engine is returned to the pool, all top level variables are removed with\n`rm(list = ls(all.names = TRUE))` so that the next script will start with a clean \nenvironment.\n\n\nFor more comprehensive examples see https://github.com/perNyfelt/renjin-spring-boot-starter-examples\n\n# Configuration\nDefault value in bold\n* se.alipsa.renjin.starter.excludeDefaultPackages=true / __false__\n* se.alipsa.renjin.starter.packageLoader=AetherPackageLoader / __ClasspathPackageLoader__\n\n# Release History\n\n### v1.0.1 in progress\n- Set compile version to java 11 (was 1.8)\n- Upgrade dependencies for commons pool, slf4j, junit\n- Add spotbugs annotations to exclude some false positives\n\n### v 1.0.0, 2020-12-20","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falipsa%2Frenjin-spring-boot-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falipsa%2Frenjin-spring-boot-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falipsa%2Frenjin-spring-boot-starter/lists"}