デバッグツールとしてのコード評価

紳士、Javaアプリケーションの開発者。今日は、コード評価を使用する簡単な方法を紹介します。その実装により、実行中のアプリケーションで任意のコードを実行できるようになり、CI / CDの時間を大幅に節約できます。





なぜ必要なのですか?

特に大企業でマイクロサービスアーキテクチャで開発する必要がある場合は、他のマイクロサービスと統合されているスタンドでのみアプリケーションが「戦闘中」にどのように機能するかを確認できる状況に精通している可能性があります。また、すべてのものをスタブでローカルにチェックできるわけではないため、特定の仮説をテストするには、新しいコードをリポジトリにプッシュする必要があります(正しく機能するという事実ではありません)... CI / CDを介して実行します...そして、ログを介して、どこかで問題が発生したことを理解します。そして、ログがあなたが間違っていた場所をすぐに示しているのは良いことです。そうでなければ、パイプラインに沿ってプッシュして実行するこのプロセスが輪廻のサイクルになる可能性があるからです。





動的に入力されたコードを実行すると、この問題の解決に役立ちます。





使い方?

ご存知のとおり、groovyは、動的コンパイルを備え完全にJava互換のプログラミング言語ですgroovyのこれら2つの機能は、Javaアプリケーションのコード評価を実装するのに役立ちます。JavaプロジェクトにGroovyサポートを自分で追加する方法を簡単に見つけることができます。そして、コード評価を実装する方法の例を示します(ある意味では、IDEでのデバッグ中に表示されるものと同様です)。





1)Groovyクラスを作成し、その中に動的に入力されたコードのクラスとプレースホルダーを配置するテンプレート文字列を作成しましょう。そのような行の例:





def EXPRESSION_CLASS_TEMPLATE = """
package dev.toliyansky.eval.service
class ExpressionClass implements java.util.function.Supplier<Object> {
	def get() {
		%s
	}
}
"""
      
      



注:パッケージは、このコードを作成するクラスと同じである必要があります。





サプライヤーを導入する理由を以下に説明します。





2)このクラスを動的にコンパイルしてロードします。





REST , code .





def finalClassCode = String.format(EXPRESSION_CLASS_TEMPLATE, code)
def supplier = groovyClassLoader.parseClass(finalClassCode)
                                .getDeclaredConstructor()
                                .newInstance() as Supplier<Object>
def result = supplier.get()
      
      



%s .





, . Supplier , . Supplier<Object> .





.





code evaluation

web kubernetes. - , , , CI/CD POD , . , , - NullPointerException.





HTTP , applicationContext, . , CI/CD. . .





web spring boot

groovy java , , , , - evaluator-spring-boot-starter





, , spring boot starter. web http://host:port/eval WEB-UI, , . , . , , curl wget POD, http://host:port/eval/groovy GET POST .





, - readme .





WEB-UIevaluator-spring-boot-starterのスクリーンショット
WEB-UI evaluator-spring-boot-starter

  • コード評価がアプリケーションのデバッグ時間を節約する方法を示しました





  • Javaプロジェクトでコード評価を実装する方法のデモンストレーション





  • スプリングブートスターターの形で既製のソリューションを示しました。








All Articles