@Transactional (প্রসারণ = Propagation.REQUIRED)


107

যদি কেউ এই টীকাকে কী ব্যাখ্যা করতে পারে এবং কখন আমরা এটি ব্যবহার করি:

@Transactional(propagation=Propagation.REQUIRED)

ধন্যবাদ



3
প্রচার.আরকিআরএইডিই লেনদেনের ডিফল্ট প্রচারের মোড, সুতরাং আপনার এটি স্পষ্টভাবে সেট করার দরকার নেই।
তিবতফ

উত্তর:


65

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

এখানে চিত্র বর্ণনা লিখুন

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html


166

আপনার যদি স্প্রিং ডক্সে সরবরাহ করা থাকে তার বাইরে ব্যবহারের কোনও সাধারণ ব্যক্তির ব্যাখ্যা প্রয়োজন

এই কোডটি বিবেচনা করুন ...

class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}

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

এই @Transactionalটীকাটি আপনার কোডটি বলার একটি মাধ্যম সরবরাহ করে যখন এটি কার্যকর করে যে এটি আবশ্যক কোনও লেনদেন হবে। এটি একটি ছাড়া চলবে না, সুতরাং আপনি আপনার কোডে এই ধারণাটি তৈরি করতে পারেন যে আপনি আপনার ডাটাবেসে অসম্পূর্ণ ডেটা রেখে যাবেন না বা যদি কোনও ব্যতিক্রম ঘটে তবে কিছু পরিষ্কার করতে হবে।

লেনদেন পরিচালনা একটি মোটামুটি জটিল বিষয় তাই আশা করি এই সরলীকৃত উত্তরটি সহায়ক


8
যদি কেউ আগ্রহী হন তবে আমি PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED, PROPAGATION_REQUIRED
ব্র্যাড

যদি এটি ডিএও স্তরটি ডিক্লেয়ার করতে এবং অ্যাক্সেস করতে প্রক্সি ভিত্তিক কনফিগারেশন ব্যবহার করে থাকে তবে ডিএও ক্লাসে থাকা পদ্ধতিটি @ ট্রান্সজেকশনাল দিয়েও মন্তব্য করতে হবে।
কুরাপিকা

আপনি যদি @Transactionalআপনার পরিষেবা স্তরটিতে যুক্ত করেছেন তবে @Transactionalসেই লেনদেনের মধ্যে ডেকে নেওয়া ডিএও পদ্ধতিগুলিতেও যুক্ত করার দরকার নেই।
ব্র্যাড

যদি doSomething()কোনও @ লেনদেন ছাড়াই অন্য নেস্টেড পদ্ধতিতে আহ্বান করে তবে এই একই লেনদেনটি সেই অনুরোধ পদ্ধতিতেও প্রযোজ্য হবে?
thisarattr

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

15

স্প্রিং অ্যাপ্লিকেশনগুলিতে, আপনি @ ট্রানজেকশনাল (প্রচার = প্রসারণ.আরএকআইআরইডি)<tx:annotation-driven/> দিয়ে কোনও শ্রেণি / পদ্ধতিটি ব্যবহার করে টিকাদান ভিত্তিক লেনদেন সহায়তা সমর্থন করে যদি স্প্রিং ফ্রেমওয়ার্কটি একটি লেনদেন শুরু করে এবং পদ্ধতিটি কার্যকর করে এবং লেনদেনের প্রতিশ্রুতি দেয়। যদি কোনও রানটাইম এক্সেপশন হয় তবে লেনদেনটি আবার ঘুরিয়ে দেওয়া হবে।

প্রকৃতপক্ষে প্রচার = প্রচার REআরএকআইআরইডিটি ডিফল্ট প্রচারের স্তর, আপনার এটি স্পষ্টভাবে উল্লেখ করার দরকার নেই।

আরও তথ্যের জন্য: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations


5

লেনদেন পরিচালনার জন্য গৃহীত বিভিন্ন লেনদেনের সেটিংস এবং আচরণগুলি বোঝার জন্য REQUIRED,ISOLATION ইত্যাদি আপনি লেনদেনের ব্যবস্থাপনা নিজেই মূলসূত্র বুঝতে হবে।

ব্যাখ্যার জন্য আরও ট্র্যাস্যাকশন পরিচালনা পড়ুন ।

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