কীভাবে বুটরুন থেকে জেভিএম বিকল্পগুলি পাস করবেন


100

আমি সহজ স্প্রিং ওয়েব অ্যাপ্লিকেশন বিকাশ করছি যা দূরবর্তী হোস্টের সাথে যোগাযোগ করে এবং আমি স্থানীয়ভাবে কর্পোরেট প্রক্সিটির পিছনে এটি পরীক্ষা করতে চাই। আমি "স্প্রিং বুট" গ্রেডেল প্লাগইন ব্যবহার করি এবং প্রশ্ন আমি কীভাবে জেভিএমের জন্য প্রক্সি সেটিংস নির্দিষ্ট করতে পারি?

আমি এটি করার বিভিন্ন উপায় চেষ্টা করেছি:

  1. gradle -Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080 bootRun
  2. export JAVA_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"
  3. export GRADLE_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"

তবে দেখে মনে হচ্ছে এগুলির কোনওটিই কাজ করে না - "NoRouteToHostException" "নেটওয়ার্ক" কোডে ছুড়ে দেয়। এছাড়াও, আমি জেভিএম শুরু যুক্তিগুলি ডিবাগ করার জন্য কিছু অতিরিক্ত কোড যুক্ত করেছি:

    RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
    List<String> arguments = runtimeMxBean.getInputArguments();
    for (String arg: arguments) System.out.println(arg);

এবং শুধুমাত্র একটি যুক্তি মুদ্রিত হয়েছিল: "-Dfile.encoding = UTF-8"।

যদি আমি কোডে সিস্টেমের সম্পত্তি সেট করি:

    System.setProperty("http.proxyHost", "X.X.X.X");
    System.setProperty("http.proxyPort", "8080");

সবকিছু ঠিকঠাক কাজ করে!

উত্তর:


109

আসল উত্তর (গ্রেডল 1.12 এবং স্প্রিং বুট 1.0.x ব্যবহার করে):

bootRunস্প্রিং বুট gradle প্লাগইন কাজটি gradle JavaExec টাস্ক প্রসারিত করে। এই দেখুন ।

এর অর্থ হল যে আপনি যুক্ত করে প্রক্সিটি ব্যবহার করতে প্লাগইনটি কনফিগার করতে পারেন:

bootRun {
   jvmArgs = "-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx"
}

আপনার বিল্ড ফাইল।

অবশ্যই আপনি এর systemPropertiesপরিবর্তে ব্যবহার করতে পারেনjvmArgs

আপনি যদি কমান্ড লাইন থেকে শর্তাধীন jvmArgs যুক্ত করতে চান তবে নিম্নলিখিতগুলি করতে পারেন:

bootRun {
    if ( project.hasProperty('jvmArgs') ) {
        jvmArgs project.jvmArgs.split('\\s+')
    }
}

gradle bootRun -PjvmArgs="-Dwhatever1=value1 -Dwhatever2=value2"

আপডেট উত্তর:

আমার উপরের স্প্রিং বুট 1.2.6.REREASE এবং গ্রেডেল 2.7 ব্যবহার করে সমাধানটি চেষ্টা করার পরে আমি পর্যবেক্ষণ করেছি যে এটি মন্তব্য করা কিছু মন্তব্য হিসাবে কাজ করছে না। তবে কার্যনির্বাহী অবস্থা পুনরুদ্ধার করতে কয়েকটি ছোট ছোট টুইট করা যেতে পারে।

নতুন কোডটি হ'ল:

bootRun {
   jvmArgs = ["-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx"]
}

হার্ড-কোডেড যুক্তিগুলির জন্য এবং

bootRun {
    if ( project.hasProperty('jvmArgs') ) {
        jvmArgs = (project.jvmArgs.split("\\s+") as List)

    }
}

কমান্ড লাইন থেকে সরবরাহ যুক্তি জন্য


4
আমি বিল্ড ফাইলটিতে এই বিকল্পগুলি "হার্ডকোডযুক্ত" না করতে চাই। প্রক্সি সেটিংস নির্দিষ্ট করার সম্ভাবনা থাকা ভাল হবে। অর্থাৎ - কমান্ড-লাইন আর্গুমেন্ট ব্যবহার করে।
ইভজেনি 12

কাজ করে না: "> মূল প্রকল্পে 'আরগস' সম্পত্তি খুঁজে পাওয়া যায়নি"।
ইভজেনি 12

আপনি কোডটি সঠিকভাবে অনুলিপি করেছেন? আমি একটি আপডেট করেছি। সেখানে নেই argsসম্পত্তি।
জিওয়ান ও

7
আমি আজ এবং এই কাজের একমাত্র উপায় চেষ্টা করেছিলাম, বুকআর {jvmArgs = ["-Dhttp.proxyHost = xxxxxx", "-Dhttp.proxyPort = এক্সএক্সএক্সএক্সএক্সএক্স"]
ভ্যালেন্টিনো ডেল আইকা

গ্রেডের কোন সংস্করণ আপনি ব্যবহার করছেন?
জিওএন্ড

73
bootRun {
  // support passing -Dsystem.property=value to bootRun task
  systemProperties = System.properties
}

এর মাধ্যমে অ্যাপ্লিকেশনটিতে শুরু হওয়া সমস্ত JVM বিকল্পগুলি পাঠানো উচিত bootRun


4
JVM- র কাছে কমান্ড লাইন বিকল্পগুলি পাস করার এটি এখন পর্যন্ত সবচেয়ে ভাল উপায়
অনুভব

@ মারভিন ফরমহোল্ড, আপনার উত্তরের জন্য ধন্যবাদ। পদ্ধতির অবিশ্বাস্যভাবে সোজা। আমার মতো নুবগুলের জন্য, আপনি যদি আরও কিছু বিশদ যুক্ত করেন তবে এটি সহায়ক হবে। পরামর্শগুলি: (1) আর্গুমেন্টের সাথে গ্রেড কমান্ড লাইন কল প্রদর্শন করুন; (২) কীভাবে স্প্রিং বুটে আর্গুমেন্টগুলি রেফারেন্স করা যায়, উদাহরণস্বরূপ, @ ভ্যালু ("$ {সম্পত্তি: ডিফল্ট}"); (3) প্যারাগুলি পাস করে ইন্টেলিজ ডায়ালগের একটি স্ক্রিনশটও সহায়ক হবে।
ব্রেট

4
দুঃখের বিষয়, আমার জন্য, এটি কেবল গ্রেড বুটরন যুক্ত করার সাথে "org.apache.catalina.LifeccleException" এর সাথে মারাত্মকভাবে ব্যর্থ হয়: কোনও শিশু পাত্রে শুরু হওয়ার পরেও ব্যর্থ হয় "কোনও ডি
প্যারাম

থেকে চেরি-অবচয় বৈশিষ্ট্য আমি একটি উত্তর হিসেবে চান দ্বারা মীমাংসিত stackoverflow.com/questions/23689054
tkruse

7

গ্রেড বিল্ড স্ক্রিপ্টে, রান টাস্কের জন্য সিস্টেমপ্রপার্টিগুলি সংজ্ঞায়িত করুন।

//to provide the properties while running the application using spring-boot's run task
    run {
        systemProperties['property name'] = 'value'
    }

এবং gradle runএই মান গ্রহণ করা উচিত।

অথবা http://forums.gradle.org/gradle/topics/how_can_i_provide_command_line_args_to_application_start_with_gradle_run এ উল্লিখিত হিসাবে একটি প্রকল্প স্তরের সম্পত্তি সংজ্ঞায়িত করুন


4
হ্যাঁ, এই সমাধান কাজ করে। তবে আমি এই কোডটি সোর্স নিয়ন্ত্রণে না রাখতে চাই। আমি সহ্য করছি যে "সবচেয়ে সঠিক" সমাধানটি হ'ল এই বিকল্পগুলি সরাসরি কমান্ড লাইনে পাস করা। এটি কি কোনও উপায়?
ইভজেনি 11

4
পোস্টে উল্লিখিত লিঙ্কটি কমান্ড লাইন থেকে তাদের পাস করার একটি উপায় রয়েছে
সুমন জে

5

@ মারভিন, আপনার পোস্টের জন্য ধন্যবাদ এটি খুব সহায়ক হয়েছিল।

আমি এটি কীভাবে ব্যবহার করেছি তা ভাগ করে নিচ্ছি:

test {
  // support passing -Dsystem.property=value to bootRun task
  systemProperties = System.properties
}

আমার কাছে JUnit পরীক্ষা রয়েছে যেগুলি এ ধরণের পরীক্ষাগুলি অন্তর্ভুক্ত করার জন্য কোনও সম্পত্তি ব্যবহৃত না হলে আমি এড়িয়ে যেতে চেয়েছিলাম। শর্তসাপেক্ষে পরীক্ষাগুলি অন্তর্ভুক্ত করার জন্য JUnit Assume ব্যবহার করা:

//first line of test
assumeThat(Boolean.parseBoolean(System.getProperty("deep.test.run","false"),true)

গ্রেড সহ এটি করার জন্য এখানে গ্রেড গ্রেড বিল্ডিং চলাকালীন প্রদত্ত সিস্টেমের সম্পত্তি প্রদানের প্রয়োজন,

gradle build -Ddeep.test.run=true

প্রকৃতপক্ষে পরীক্ষার মধ্য দিয়ে গেছে।

আশা করি এটি অন্যদের শর্তাধীন পরীক্ষা চালানোর জন্য এই পদ্ধতির চেষ্টা করতে সহায়তা করবে।


3
bootRun {
  args = ['myProgramArgument1', 'myProgramArgument2']
}

JvmArgs ব্যবহারের ফলে JVM প্রারম্ভিক সমস্যার কারণ হতে পারে। আরোগুলি ব্যবহার করা আপনাকে আপনার কাস্টম প্রোগ্রাম যুক্তিগুলি পাস করার অনুমতি দেয় allows


আপনি কীভাবে আমাকে এই আর্গুমেন্টগুলি অ্যাপ্লিকেশন.ক্লাসে বা বুটস্ট্র্যাপ.ক্লাসে ব্যবহার করবেন তা আমাকে দেখাতে পারেন? (আমি গ্রিল 3.XX ব্যবহার করছি)
স্টেফানো স্কর্পান্তি

2

এটি কাজ করে বলে মনে হচ্ছে:

bootRun {
    systemProperties "property1": "value1", "property2": "value2"
}

1

আমিও একই ধরণের সমস্যায় পড়েছি, বুটরানকে কিছু প্যারামিটারের দরকার ছিল তবে আমি কিছুটা নমনীয়তা বজায় রাখতে এবং স্ট্যান্ডার্ড বুটরুন আচরণের সাথে লেগে থাকতে চাই বলে বুটরানকে সংশোধন করার মতো অনুভব করব না। আমার পরামর্শটি নিম্নোক্ত কোড স্নিপেটে বর্ণিত কিছু কাস্টম টাস্ক (বুটরুনডেভ, বুটরুনপ্রক্সি বলুন) যুক্ত করুন

task bootRunPxy(type: org.springframework.boot.gradle.run.BootRunTask, dependsOn: 'build') {
    group = 'Application'
    doFirst() {
        main = project.mainClassName
        classpath = sourceSets.main.runtimeClasspath
        systemProperty 'http.proxyHost', 'xxxxx'
        systemProperty 'http.proxyPort', 'yyyyy'
    }
}

আমার স্ক্রিপ্টটি অনুশীলনের পরিবেশ নেই তবে আমি স্প্রিং.প্রোফিলস.অ্যাকটিভ সম্পত্তি ব্যবহার করে স্প্রিংয়ে প্রোফাইল পাস করার জন্য এই পদ্ধতির ব্যবহার করেছি। ক্রেডিটগুলি করোল কালিস্কির কাছে যেতে হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.