アプリケーションにグルーヴィーシェルを埋め込む

職場では、実行中のJavaアプリケーションにアクセスして、一部のデータやメソッドを見る必要がある場合があります。 以前はjspで記述したことを実行し、アプリケーションがデプロイされているディレクトリにドロップしてから、このjspを要求していました。 あまり便利ではありませんでした。

そして、Groovyシェルをアプリケーションに埋め込み、Telnet経由でアクセスできるようにすることで、人生を楽にするアイデアを思いつきました。



Springを使用するため、サービス自体はSpring Beanとして実装され、サービスは定義されているコンテキストへのアクセスを提供します。

telnetサーバーを有効にするには、構成に次の行を追加する必要があります。

<bean class="ru.ind.tgs.GroovyShellService" p:listenPort="3333"/> 

セキュリティ上の理由から、ソケットはループバックインターフェイスにのみバインドします。

これで、プロジェクトを開始した後、telnetを使用して実行中のJavaマシンに接続できます。ここでは、groovyシェルインターフェイスが表示され、任意のgroovyコードを記述できます。
シェルでは、特別な変数名を使用できます。context-GroovyShellServiceが配置されているスプリングコンテキストにアクセスするため、およびこれらのコンテキストに直接アクセスするために多くのビン識別子が定義されています。

groovyシェルでは、Beanの識別子と呼び出されたメソッドの自動補完が機能します(タブキーを押す)。

セッションの例:

 $ telnet 127.0.0.1 3333 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Groovy Shell (1.8.5, JVM: 1.7.0_51) Type 'help' or '\h' for help. ----------------------------------------------------------------------------------------------------------- groovy:000> context.isActive() ===> true groovy:000> Arrays.toString(context.getBeanDefinitionNames()) ===> [org.springframework.context.annotation.internalConfigurationAnnotationProcessor, ....] groovy:000> userDAO.findAll(); ===> [XXX, YYY] 

ソースコードはgithubにあります。

Source: https://habr.com/ru/post/J223745/


All Articles