我最近开始花更多的时间在Spring Boot上,并且开始觉得缺少一个shell(类似于Grails控制台),就像应用程序一样,我可以使用存储库,服务等...这样的事情存在于春靴?
答案 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-plugin和spring-ctx一起使用(我也创建了两个项目)。
专家:
缺点:
将以下内容添加到您的build.gradle
:
plugins {
id "com.github.mrsarm.jshell.plugin" version "1.0.0"
}
在dependencies
部分中添加以下依赖项:
implementation 'com.github.mrsarm:spring-ctx:1.0.0'
在repositories
部分的末尾添加:
maven { url 'https://jitpack.io' }
任何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
配置完成。您可以启动在控制台中执行的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
}