উত্পাদনের পরিবেশে আমি কীভাবে একটি বসন্ত বুট এক্সিকিউটেবল জার চালাব?


105

স্প্রিং বুটের পছন্দসই ডিপ্লোয়মেন্ট পদ্ধতিটি একটি এক্সিকিউটেবল জার ফাইলের মাধ্যমে হয় যার ভিতরে টমক্যাট থাকে।

এটি একটি সাধারণ দিয়ে শুরু করা হয়েছে java -jar myapp.jar

এখন, আমি সেই জারটি ইসি 2 তে আমার লিনাক্স সার্ভারে স্থাপন করতে চাই, আমি কি কিছু অনুপস্থিত বা ডেমন হিসাবে অ্যাপ্লিকেশনটি সঠিকভাবে শুরু করার জন্য আমার সত্যিই একটি এনআইপি স্ক্রিপ্ট তৈরি করা দরকার?

java -jarআমি লগ আউট করার সময় যদি অ্যাপ্লিকেশনটি কেবল মারা যায়।

আমি এটি স্ক্রিনে বা নোহুপে শুরু করতে পারি তবে এটি খুব মার্জিত নয় এবং আমার সার্ভারে একটি পুনঃসূচনা আমাকে লগ ইন করতে এবং প্রক্রিয়াটি ম্যানুয়ালি শুরু করতে বাধ্য করবে।

সুতরাং, বসন্ত বুটে কাজের জন্য ইতিমধ্যে কিছু আছে?


1
nohup / স্ক্রিন (নোংরা পদ্ধতি), init / systemd / upstart (সঠিক পদ্ধতি)

@ আরসি ইয়েপ, আমি যতটা জানি, যেমন আমি /etc/init.d তে একটি কাস্টম স্ক্রিপ্ট দিয়ে / sbin / init কাজটি করব, তবে আসলেই কি এই ধারণাটি তৈরি করা উচিত যে প্রত্যেককে এই ব্যবস্থাপনার জন্য তার নিজস্ব স্ক্রিপ্ট তৈরি করা উচিত? ডিমন (শুরু, থামানো, পুনরায় চালু, অবস্থা)? মনে হয় যে সমাধানটিতে কিছু অনুপস্থিত।
ক্লিবার গনক্যাল্ভস

আমি মনে করি বসন্ত-বুটে কিছু অনুপস্থিত (এটি সত্যিই "তাজা" প্রকল্প বিটিডাব্লু) কেবল দায়িত্বে থাকা দলের সাথে যোগাযোগ করুন এবং একটি বিবর্তনের প্রস্তাব করুন।

ঠিক আছে, আপনি যদি কোনও যুদ্ধ সংরক্ষণাগার তৈরি করেন তবে আপনি টমক্যাটে আপনার বিতরণের সংস্করণটি ব্যবহার করতে পারেন যা ব্যবহারের জন্য একটি স্ক্রিপ্ট প্রস্তুত থাকবে। অন্যদিকে, আপনি যদি এক্সিকিউটেবল জার পন্থাটি ব্যবহার করেন তবে আপনাকে নিজের কাস্টম ইনি স্ক্রিপ্টটি নিয়ে আসতে হবে। এটি বুটের রাজ্যে রয়েছে কিনা তা নিশ্চিত নয়, তবে এটি স্পষ্টভাবে অনুপস্থিত যা একধরণের অদ্ভুত, অতএব আমি যদি কিছু উপেক্ষা করেছি তবে আমাকে জিজ্ঞাসা করুন। তাদের ping হবে।
ক্লিবার গনক্যাল্ভেস

উত্তর:


96

দয়া করে নোট করুন যে স্প্রিং বুট ১.৩.০. এম 1 থেকে, আপনি ম্যাভেন এবং গ্রেডল ব্যবহার করে সম্পূর্ণরূপে এক্সিকিউটেবল জারগুলি তৈরি করতে সক্ষম।

মাভেনের জন্য, কেবল আপনার মধ্যে নিম্নলিখিতটি অন্তর্ভুক্ত করুন pom.xml:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

গ্রেডলের জন্য নিম্নলিখিত স্নিপেটটি আপনার যুক্ত করুন build.gradle:

springBoot {
    executable = true
}

পুরোপুরি সম্পাদনযোগ্য জারে ফাইলটির সামনের অংশে একটি অতিরিক্ত স্ক্রিপ্ট থাকে যা আপনাকে আপনার স্প্রিং বুট জারের সিমলিংক করতে init.dবা কোনও systemdস্ক্রিপ্ট ব্যবহার করতে দেয় ।

init.d উদাহরণ:

$ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp

এটি আপনাকে আপনার অ্যাপ্লিকেশনটি শুরু করতে, থামাতে এবং পুনরায় চালু করার অনুমতি দেয়:

$/etc/init.d/yourapp start|stop|restart

অথবা systemdস্ক্রিপ্ট ব্যবহার করুন :

[Unit]
Description=yourapp
After=syslog.target

[Service]
ExecStart=/var/yourapp/yourapp.jar
User=yourapp
WorkingDirectory=/var/yourapp
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

নিম্নলিখিত লিঙ্কগুলিতে আরও তথ্য:


4
$ chmod +x /etc/init.d/yourappআরম্ভ / থামাতে / পুনঃসূচনা করতে সক্ষম হতে আপনার প্রয়োজনও হতে পারে
রোহিত নন্দকুমার

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

এটি কাজ করে না! আমি এটা চেষ্টা করেছি এবং আমি নিম্নলিখিত ত্রুটির পাবেন: MyApp.service শুরু করতে ব্যর্থ হয়েছে: ইউনিট MyApp.service পাওয়া যায়নি
Martijn Hiemstra

9

উত্পাদনে স্প্রিং বুট অ্যাপ্লিকেশনগুলি চালানোর এখন পর্যন্ত সবচেয়ে সহজ এবং নির্ভরযোগ্য উপায় হ'ল ডকারের সাথে। আপনার একাধিক সংযুক্ত পরিষেবা ব্যবহার করার প্রয়োজন হলে ডকার কমপোজ, ডকার সোর্ম বা কুবারনেটস ব্যবহার করুন।

আপনাকে শুরু করার Dockerfileজন্য অফিশিয়াল স্প্রিং বুট ডকার গাইড থেকে একটি সহজ :

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD YOUR-APP-NAME.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

ডিমন হিসাবে ধারকটি চালাতে এখানে একটি নমুনা কমান্ড লাইন রয়েছে:

docker run \
  -d --restart=always \
  -e "SPRING_PROFILES_ACTIVE=prod" \
  -p 8080:8080 \
  prefix/imagename

3

আমার স্প্রিং বুট অ্যাপ্লিকেশনটিতে দুটি আরম্ভকারী রয়েছে। একটি উন্নয়নের জন্য এবং অন্য উত্পাদন জন্য। বিকাশের জন্য, আমি এই জাতীয় পদ্ধতিটি ব্যবহার করি:

@SpringBootApplication
public class MyAppInitializer {

    public static void main(String[] args) {
        SpringApplication.run(MyAppInitializer .class, args);
    }

}

উত্পাদনের পরিবেশের জন্য আমার প্রবর্তকটি স্প্রিংবুটসার্ভালেটআইনিটিয়ালাইজার প্রসারিত করে এবং এর মতো দেখায়:

@SpringBootApplication
public class MyAppInitializerServlet extends SpringBootServletInitializer{
    private static final Logger log = Logger
            .getLogger(SpringBootServletInitializer.class);
    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder builder) {
        log.trace("Initializing the application");
        return builder.sources(MyAppInitializerServlet .class);
    }

}

আমি গ্রেডেল ব্যবহার করি এবং আমার বিল্ড.gradle ফাইলটি ' ওয়ার ' প্লাগইন প্রয়োগ করে । আমি যখন এটি বিকাশের পরিবেশে চালনা করি তখন আমি বুটরন টাস্কটি ব্যবহার করি । যেখানে আমি যখন এটি উত্পাদনে স্থাপন করতে চাই, আমি ওয়ার তৈরি করতে এবং স্থাপন করতে এসেম্বল টাস্কটি ব্যবহার করি ।

বিকাশের সময় ইনবিল্ট টমক্যাটের সরবরাহিত সুবিধাগুলি ছাড় না দিয়ে আমি উত্পাদনে একটি সাধারণ বসন্ত অ্যাপ্লিকেশনটির মতো চালাতে পারি। আশাকরি এটা সাহায্য করবে.


2

উত্পাদনের পরিবেশে আপনি নিজের অ্যাপটি একটি মেশিন পুনরায় চালু করা ইত্যাদি ইত্যাদিতে আবার শুরু করতে চান, একটি /etc/init.d/ স্ক্রিপ্ট তৈরি করা এবং এটি শুরু করার এবং থামানোর জন্য উপযুক্ত রানলেভেলের সাথে সংযোগ স্থাপন করা সঠিক পন্থা সঠিক পদ্ধতি approach স্প্রিং বুট এটি আচ্ছাদন করতে প্রসারিত হবে না কারণ এটি একটি অপারেটিং সিস্টেমের নির্দিষ্ট সেটআপ এবং এটি অন্যান্য টন অন্যান্য বিকল্প, আপনি এটি চানট কারাগারে চলতে চান, অন্য কোনও সফ্টওয়্যার ইত্যাদির আগে এটি থামানো / শুরু করা দরকার কি?


2

আপনি সুপারভাইজার নামক অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন । সুপারভাইজার কনফিগারেশনে আপনি একাধিক পরিষেবা এবং এটি কার্যকর করার উপায়গুলি সংজ্ঞায়িত করতে পারেন।

জাভা এবং স্প্রিং বুট অ্যাপ্লিকেশনগুলির জন্য কমান্ডটি হবে java -jar springbootapp.jar

অ্যাপ্লিকেশনটি সর্বদা চলমান রাখতে বিকল্প সরবরাহ করা যেতে পারে o সুতরাং যদি ইসি 2 পুনরায় চালু হয় তবে সুপারভাইজার আপনাকে অ্যাপ্লিকেশনটি পুনরায় চালু করবে

/Etc/init.d/ এ স্টার্টআপ স্ক্রিপ্টগুলি রাখার তুলনায় সুপারভাইজারটি ব্যবহার করা সহজ বলে মনে করেছি use


2

আপনি যদি গ্রেড ব্যবহার করছেন তবে আপনি এটি কেবল আপনার বিল্ড.gradle এ যুক্ত করতে পারেন

springBoot {
    executable = true
}

তারপরে আপনি আপনার অ্যাপ্লিকেশনটি ./your-app.jar লিখে টাইপ করতে পারেন

এছাড়াও, আপনার অ্যাপ্লিকেশনটিকে পরিষেবা হিসাবে সেট আপ করতে আপনি এখানে একটি সম্পূর্ণ গাইড খুঁজে পেতে পারেন

56.1.1 একটি init.d পরিষেবা হিসাবে ইনস্টলেশন (সিস্টেম ভি)

http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

চিয়ার্স


আসলে এটি দেখা যাচ্ছে যে ডকস.স্প্রিং.আইপিbootRepackage { executable = true }
ফিলিপ

2

পরিষেবা ব্যতীত উইন্ডোজ ওএসে।

start.bat

@ECHO OFF
call run.bat start

stop.bat:

@ECHO OFF
call run.bat stop

run.bat

@ECHO OFF
IF "%1"=="start" (
    ECHO start myapp
    start "myapp" java -jar -Dspring.profiles.active=staging myapp.jar
) ELSE IF "%1"=="stop" (
    ECHO stop myapp
    TASKKILL /FI "WINDOWTITLE eq myapp"
) ELSE (
    ECHO please, use "run.bat start" or "run.bat stop"
)
pause

1

আমি এমন অ্যাপ্লিকেশনগুলি শুরু করি যা আমি অবিচ্ছিন্নভাবে চালাতে চাই বা কমপক্ষে আধা-স্থায়ীভাবে স্ক্রিন -dmS NAME / পাথ / টু / স্ক্রিপ্টের মাধ্যমে চালাতে চাই। যতদূর আমাকে অবহিত করা হয়েছে এটি সর্বাধিক মার্জিত সমাধান।


0

এটি একটি সহজ, আপনি আপনার কোড মোতায়েন শেষ করতে স্প্রিং বুট মাভেন প্লাগইন ব্যবহার করতে পারেন।

প্লাগইন কনফিগার মত:

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${debug.port}
                    </jvmArguments>
                    <profiles>
                        <profile>test</profile>
                    </profiles>
                    <executable>true</executable>
                </configuration>
            </plugin>

এবং, আপনার jvmArtumentsজন্য jvm যোগ করা হয়। profilesআপনার অ্যাপ্লিকেশন শুরু করতে একটি প্রোফাইল চয়ন করবে। executableআপনার অ্যাপ্লিকেশনটি ড্রাইভে চালিত করতে পারে can

এবং যদি আপনি mvnwআপনার প্রকল্পে যুক্ত হন, বা আপনার একটি খাঁজকাটা ছাঁটাই রয়েছে। আপনি কেবল ./mvnw spring-boot:runএমভিএনডাব্লু বা ম্যাভেনের জন্য কল করতে পারেন mvn spring-boot:run

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