什么是Spring Boot的Grails控制台?

时间:2017-01-12 06:31:30

标签: spring grails spring-boot

我最近开始花更多的时间在Spring Boot上,并且开始觉得缺少一个shell(类似于Grails控制台),就像应用程序一样,我可以使用存储库,服务等...这样的事情存在于春靴?

2 个答案:

答案 0 :(得分:1)

我最近启动了Spring Context from Groovy项目,该项目允许您使用repl groovy交互式控制台访问Remote Shell插件中的所有bean对象。

看起来像这样:

$ ssh -p 2000 user@localhost
user@localhost's password:
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v1.4.6.RELEASE) on myhost
> repl groovy
Using repl groovy
> ctx.App.myUserService.findUserByEmail("mrsarm@gmail.com")[0].id
100123
> ctx.App.myUserService.getById(100123).name
Mariano Ruiz
> ctx.App.contactDao.logger.effectiveLevel
INFO
> ctx.App.contactDao.logger.setLevel(ch.qos.logback.classic.Level.DEBUG)

答案 1 :(得分:0)

正如我在上一篇文章中和后面的评论中提到的那样,可以将Spring Context from Groovy工具用于Spring Boot 1.x项目,但是由于Spring Boot框架中的更改,它不适用于Spring。 Boot 2+项目,在这种情况下,您可以将jshell-pluginspring-ctx一起使用(我也创建了两个项目)。

专家

  • 它可以与任何Spring Boot项目和所有基于Java的项目一起使用
  • 您可以使用纯Java代替Groovy,该插件将启动一个jshell控制台(根据您的偏好,这可能是一个缺点)

缺点

  • 仅可用于JDK 9+项目,尽管您可以使用此tip来克服它。
  • 仅适用于Gradle(不支持Maven或其他构建工具)
  • 由于Gradle工具中的limitation,自动补全功能无法正常工作。

快速设置,遵循步骤herehere

  1. 将以下内容添加到您的build.gradle

    plugins {
      id "com.github.mrsarm.jshell.plugin" version "1.0.0"
    }
    
  2. dependencies部分中添加以下依赖项:

    implementation 'com.github.mrsarm:spring-ctx:1.0.0'
    
  3. repositories部分的末尾添加:

    maven { url 'https://jitpack.io' }
    
  4. 任何Spring Boot应用程序都有一个用@SpringBootApplication注释的类,它是应用程序的起点,使用public static void main(String[] args)方法,您需要在以下位置创建一个startup.jsh文件您的项目的根调用该方法,例如:

    com.my.package.MyApplication.main(new String[]{})
    

    您还可以添加要使用的业务类的导入,数量尽可能多,否则,可以在JShell启动后导入它们:

    import com.my.package.services.MyUserService
    
  5. 配置完成。您可以启动在控制台中执行的jshell会话:

    $ gradle --console plain jshell
    

一旦会话开始,您就可以使用Spring应用程序,从Spring上下文中访问bean对象,如下所示:

$ gradle --console plain jshell

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

14:43:28.320  INFO com.my.package.MyApplication             : Starting Application on kubu1910 with PID 5225 (/projects/...
14:43:28.323 DEBUG com.my.package.MyApplication             : Running with Spring Boot v2.2.4.RELEASE, Spring v5.2.3.RELEASE
14:43:28.324  INFO com.my.package.MyApplication             : The following profiles are active: ...
14:43:30.229  INFO boot.web.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8010 (http)

...
...

14:43:33.729  INFO tuate.endpoint.web.EndpointLinksResolver : Exposing 3 endpoint(s) beneath base path ''
14:43:33.811  INFO boot.web.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8010 (http) with context path ''
14:43:33.816  INFO com.my.package.MyApplication             : Started Application in 6.995 seconds (JVM running for 10.524)

> Task :jshell
|  Welcome to JShell -- Version 11.0.6
|  For an introduction type: /help intro

jshell> var myUserService = ctx.App.getBean(MyUserService.class)

jshell> ctx.App.ppjson(myUserService.getByUsername("admin"))
{
  "name" : "Jhon",
  "lastName" : "Due",
  "username" : "admin",
  "age" : null
}