আমার Spring Boot
ওয়েবপ্যাপটি ঠিক চলছে, এবং আমি এটি গ্রহণের মাধ্যমে ডিবাগ করতে চাই।
সুতরাং আমার রিমোট জাভা অ্যাপ্লিকেশন ডিবাগারটি চালু করার সময়, আমার কোন বন্দরটি শোনা উচিত? এবং আমার ওয়েব অ্যাপে কি কোনও সেটিং আমাকে ডিবাগিং সক্ষম করতে সেট করতে হবে?
আমার Spring Boot
ওয়েবপ্যাপটি ঠিক চলছে, এবং আমি এটি গ্রহণের মাধ্যমে ডিবাগ করতে চাই।
সুতরাং আমার রিমোট জাভা অ্যাপ্লিকেশন ডিবাগারটি চালু করার সময়, আমার কোন বন্দরটি শোনা উচিত? এবং আমার ওয়েব অ্যাপে কি কোনও সেটিং আমাকে ডিবাগিং সক্ষম করতে সেট করতে হবে?
উত্তর:
আপনি কেন সঠিক main()
পদ্ধতিটিতে ক্লিক করুন এবং নির্বাচন করবেন না "Debug As... Java Application"
?
আছে অধ্যায় 19.2 স্প্রিং বুট রেফারেন্স মধ্যে আপনি দূরবর্তী ডিবাগ করা সমর্থন সক্ষমিত-র সাথে আপনার আবেদন শুরু ব্যাপারে বলে।
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
-jar target/myproject-0.0.1-SNAPSHOT.jar
আপনি আপনার অ্যাপ্লিকেশন শুরু করার পরে কেবল চালনা / ডিবাগ কনফিগারেশনে সেই রিমোট জাভা অ্যাপ্লিকেশন কনফিগারেশন যুক্ত করুন, আপনার অ্যাপ্লিকেশন শুরু করার সময় আপনি যে পোর্ট / ঠিকানাটি নির্ধারণ করেছেন তা নির্বাচন করুন এবং তারপরে আপনি ডিবাগ করতে পারেন নিখরচায়।
java -agentlib:jdwp=help
বলছে "পুরানো-এক্সরঞ্জডডব্প ইন্টারফেসটি এখনও ব্যবহার করা যেতে পারে, তবে ভবিষ্যতে প্রকাশে অপসারণ করা হবে"। পরিবর্তে ব্যবহার করুন-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
সহজ সমাধান:
টাইপ করার পরিবর্তে mvn spring-boot:run
, কেবল টাইপ করুনmvnDebug spring-boot:run
আপনার এখনও প্রাসঙ্গিক বন্দরে "রিমোট জাভা অ্যাপ্লিকেশন" এর জন্য একটি নতুন ডিবাগ কনফিগারেশন তৈরি করে Eclipse এ ডিবাগারটি সংযুক্ত করতে হবে।
এই কাজটি পেতে আমার রিমোট ডিবাগিং সেট আপ করার দরকার নেই, আমি মাভেনকে ব্যবহার করেছি।
spring-boot::run
।এনবি। লাইন বাই লাইন ডিবাগিং করার সময় আপনার আইডিইতে যদি আপনার প্রকল্পের উত্স কোডটি খুঁজে পেতে সমস্যা হয় তবে এই এসও উত্তরটি একবার দেখুন হয়, তবে ডিবাগ অ্যাপ্লিকেশনটিতে কীভাবে আপনার উত্স কোডটি ম্যানুয়ালি সংযুক্ত করতে হয় তা জানতে ।
আশা করি এটি কাউকে সাহায্য করবে!
আসুন ধরে নেওয়া যাক আপনি আপনার স্প্রিং বুট অ্যাপ্লিকেশনটিকে পরিষেবা হিসাবে সেটআপ করার ক্ষেত্রে স্প্রিং বুটের গাইডটি সফলভাবে অনুসরণ করেছেন । আপনার অ্যাপ্লিকেশন আর্টিফ্যাক্ট /srv/my-app/my-app.war
একটি কনফিগারেশন ফাইল সহ উপস্থিত থাকে /srv/my-app/my-app.conf
:
# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.
JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging
আপনি যখন আপনার স্প্রিং বুট অ্যাপ্লিকেশনটি পুনরায় চালু করবেন sudo service my-app restart
, তার লগ ফাইলটিতে এটি /var/log/my-app.log
থাকা একটি লাইন হওয়া উচিত Listening for transport dt_socket at address: 8002
।
সার্ভারের সাথে কোনো SSH পোর্ট-ফরোয়ার্ড করলে সুড়ঙ্গ খুলুন: ssh -L 8002:localhost:8002 myusername@staging.example.com
। এই এসএসএইচ সেশনটি চলমান রাখুন।
এক্সিলিপ এ, টুলবার থেকে, চালান -> ডিবাগ কনফিগারেশনগুলি নির্বাচন করুন -> রিমোট জাভা অ্যাপ্লিকেশন নির্বাচন করুন -> নতুন বোতামটি ক্লিক করুন -> হোস্ট লোকালহোস্ট হিসাবে এবং পোর্ট 8002 হিসাবে (বা আপনার কাছে যা কিছু আছে ) হিসাবে নির্বাচন করুন আগে পদক্ষেপে কনফিগার করা)। প্রয়োগ করুন এবং তারপরে ডিবাগ ক্লিক করুন ।
এক্সিলিপ ডিবাগারটি এখন রিমোট সার্ভারের সাথে সংযুক্ত হওয়া উচিত। ডিবাগের দৃষ্টিভঙ্গিতে স্যুইচিংয়ের সাথে সংযুক্ত জেভিএম এবং এর থ্রেডগুলি প্রদর্শন করা উচিত। ব্রেকপয়েন্টগুলি দূরবর্তীভাবে ট্রিগার হওয়ার সাথে সাথেই গুলি চালানো উচিত।
কমান্ডের নীচে রান করুন যেখানে pom.xml
স্থাপন করা হয়েছে:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
এবং আপনার দূরবর্তী জাভা অ্যাপ্লিকেশনটি পোর্টে ডিবাগিং বিকল্পের সাথে শুরু করুন5005
Spring Boot 2.0.3.RELEASE
।
আমার মতে সেরা সমাধানটি হল pom.xML এ একটি প্লাগইন যুক্ত করা এবং আপনাকে সর্বদা আর কিছু করার দরকার নেই:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
</jvmArguments>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
mvn clean install
ডিবাগারটি ট্রিগার করে এবং বিল্ডটি স্তব্ধ হয়ে যায়। এটি যদি mvnDebug clean install
কমান্ডটি করতে পারে তবে তা দুর্দান্ত ।
দয়া করে http://java.dzone.com/articles/how-debug-remote-java-applicat দেখুনরিমোট ডিবাগিং সক্ষম করতে । আপনি যদি অ্যাপ্লিকেশনটি চালানোর জন্য টোমক্যাট ব্যবহার করছেন তবে দূরবর্তী ডিবাগ প্যারামিটারগুলি দিয়ে টমক্যাট শুরু করুন বা নীচের কমান্ডটি ব্যবহার করে আপনি জেপিডিএ সমর্থন দিয়ে টমক্যাট শুরু করতে পারেন।
উইন্ডোজ
<tomcat bin dir>/startup.bat jpda
* নিক্স
<tomcat bin dir>/startup.sh jpda
এটি 8000 বন্দরে রিমোট ডিবাগিং সক্ষম করবে
এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে, তবে আমি স্প্রিংবুট + গ্রেডেল + জেহিস্টার, ডিবাগ করতে একই সমস্যা পেয়েছি,
বেশিরভাগ ক্ষেত্রে স্প্রিং বুট অ্যাপ্লিকেশন ডান ক্লিক এবং ডিবাগের সাহায্যে ডিবাগ করতে পারে তবে আপনি যখন কিছু অতিরিক্ত পরিবেশের প্যারামিটার সেটআপ রেখে গ্রেড ব্যবহার করেন তখন সরাসরি ডিবাগ করা সম্ভব হয় না।
এটি সমাধানের জন্য, Eclipse দূরবর্তী জাভা অ্যাপ্লিকেশন হিসাবে একটি অতিরিক্ত বৈশিষ্ট্য সরবরাহ করেছে
এই বৈশিষ্ট্যগুলি ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনটি ডিবাগ করতে পারেন।
নীচের পদক্ষেপ অনুসরণ করুন:
./gradlew bootRun --debug-jvm
কমান্ড দিয়ে আপনার গ্রেড অ্যাপ্লিকেশন চালান
এখন গ্রহনে যান -> ডান ক্লিক প্রকল্প এবং ডিবাগ কনফিগারেশন -> রিমোট জাভা অ্যাপ্লিকেশন।
আপনাকে স্থানীয় হোস্ট এবং পোর্ট হিসাবে 5005 হিসাবে হোস্ট এবং পোর্ট যুক্ত করুন (গ্রেড ডিবাগের জন্য ডিফল্ট, আপনি এটি পরিবর্তন করতে পারেন)
পড়ুন আরো বিস্তারিত এবং ধাপে জন্য।
Right click on the spring boot project -> debug as -> spring boot App
। একটি ডিবাগার পয়েন্ট রাখুন এবং পোস্টম্যানের মতো ক্লায়েন্টের কাছ থেকে অ্যাপ্লিকেশনটি অনুরোধ করুন