বসন্তে টমক্যাট দ্বারা সরবরাহিত জেএনডিআই ডেটাসোর্সটি কীভাবে ব্যবহার করবেন?


159

এটি DriverManagerDataSourceক্লাস সম্পর্কে স্প্রিং জাভাদোক নিবন্ধে বলা হয় যে এই শ্রেণিটি খুব সহজ এবং এটি সুপারিশ করা হয়

ধারক দ্বারা সরবরাহিত একটি জেএনডিআই ডেটাসোর্স ব্যবহার করতে। এর মাধ্যমে একটি স্প্রিং অ্যাপ্লিকেশনসন্টেক্সটে শিম DataSourceহিসাবে প্রকাশ করা যেতে পারেDataSourceJndiObjectFactoryBean

প্রশ্নটি হল: আমি কীভাবে এটি সম্পাদন করব?

উদাহরণস্বরূপ, আমি যদি DataSourceআমার কাস্টম মাইএসকিউএল ডাটাবেস অ্যাক্সেস করতে শিম পেতে চাই, তবে আমার তখন কী প্রয়োজন? প্রসঙ্গ কনফিগারেশন ইত্যাদিতে আমার কী লিখতে হবে?

উত্তর:


302

যদি স্প্রিংয়ের এক্সএমএল স্কিমা ভিত্তিক কনফিগারেশন ব্যবহার করা হয় তবে বসন্তের প্রসঙ্গে এটির মতো সেটআপ করুন:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
...
<jee:jndi-lookup id="dbDataSource"
   jndi-name="jdbc/DatabaseName"
   expected-type="javax.sql.DataSource" />

বিকল্পভাবে, এর মতো সাধারণ বিন বিন্যাস ব্যবহার করে সেটআপ করুন:

<bean id="DatabaseName" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/>
</bean>

আপনি টমক্যাটের সার্ভার.এক্সএমএলে এমন কিছু ব্যবহার করে জেএনডিআই সংস্থানটি ঘোষণা করতে পারেন:

<GlobalNamingResources>
    <Resource name="jdbc/DatabaseName"
              auth="Container"
              type="javax.sql.DataSource"
              username="dbUser"
              password="dbPassword"
              url="jdbc:postgresql://localhost/dbname"
              driverClassName="org.postgresql.Driver"
              initialSize="20"
              maxWaitMillis="15000"
              maxTotal="75"
              maxIdle="20"
              maxAge="7200000"
              testOnBorrow="true"
              validationQuery="select 1"
              />
</GlobalNamingResources>

এবং টমক্যাটের ওয়েব কনটেক্সট.এক্সএমএল থেকে জেএনডিআই সংস্থানটি উল্লেখ করুন:

  <ResourceLink name="jdbc/DatabaseName"
   global="jdbc/DatabaseName"
   type="javax.sql.DataSource"/>

রেফারেন্স ডকুমেন্টেশন:

সম্পাদনা করুন: টমক্যাট 8 এবং স্প্রিং 4 এর জন্য এই উত্তরটি আপডেট করা হয়েছে Tom টমকেটের ডিফল্ট ডেটাসোর্স রিসোর্স পুল সেটআপের জন্য কয়েকটি সম্পত্তি নাম পরিবর্তন হয়েছে ।


@ স্কাফম্যান হ্যাঁ, তবে আপনি স্প্রিং রেফারেন্স ডকুমেন্টেশনের লিঙ্ক সরবরাহ করেন।
এটিয়েন মিরেট

"টমক্যাট এর ওয়েব কনটেক্সট.এক্সএমএল" বলতে কোন ফাইলটি বোঝাচ্ছেন?
পাভেল নিডোবা

1
@ পাভেলনিডোবা টমক্যাট টমক্যাট নির্দিষ্ট ওয়েব অ্যাপ্লিকেশন কনফিগারেশনের জন্য "প্রসঙ্গ" ব্যবহার করে। প্রসঙ্গ ফাইল এবং / অথবা প্রসঙ্গ কনফিগারেশন বিভিন্ন স্থানে স্থাপন করা যেতে পারে, তাই আমি আপনাকে একটি নির্দিষ্ট উত্তর দিতে পারব না। একটি সাধারণ অবস্থান "/META-INF/context.xML"। এখানে "একটি প্রসঙ্গ নির্ধারণ করা" বিভাগ দেখুন: tomcat.apache.org/tomcat-8.0-doc/config/…
কালিয়াটেক

মিমি ... আমার ওরাকল ডিবির জন্য কাজ করছে বলে মনে হচ্ছে না, পোস্টগ্রেসকিএল এর সাথে কোনও পার্থক্য রয়েছে?
ফেট

1
@ ফেট জেডিবিসি / জেএনডিআই / টমক্যাট স্তরে ওরাকল বনাম পোস্টগ্রাইএসকিউএল এর সাথে কোনও মৌলিক পার্থক্য নেই। যাইহোক, ওরাকল ক্লায়েন্ট / সার্ভার সেটআপের বিশদটি যখন আসে তখন পোস্টগ্রাইএসকিউএল থেকে খুব আলাদা। মূল প্রশ্ন / উত্তরের বাইরে সুযোগ। আপনি কী চেষ্টা করেছেন তার বিবরণ, নির্দিষ্ট সংস্করণ এবং কোনও ত্রুটি বার্তা সহ একটি নতুন প্রশ্ন পোস্ট করার পরামর্শ দিন। উদাহরণ: stackoverflow.com/questions/10388137/...
kaliatech

52

স্প্রিংয়ের জাভা কনফিগ পদ্ধতিতে আপনি এটি এর মতো করতে পারেন:

@Configuration
public class MainConfig {

    ...

    @Bean
    DataSource dataSource() {
        DataSource dataSource = null;
        JndiTemplate jndi = new JndiTemplate();
        try {
            dataSource = jndi.lookup("java:comp/env/jdbc/yourname", DataSource.class);
        } catch (NamingException e) {
            logger.error("NamingException for java:comp/env/jdbc/yourname", e);
        }
        return dataSource;
    }

}

2
অথবা আরও বিশেষায়িত জেন্ডিডাটাসোর্স লুকআপ
বনাম

21

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

<jee:jndi-lookup expected-type="javax.sql.DataSource" id="springBeanIdForSampleDS" jndi-name="sampleDS"/>

jeeউপসর্গের জন্য আপনাকে নেমস্পেস এবং স্কিমা অবস্থানটি নির্ধারণ করতে হবে :

xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"

15

ডকুমেন্টেশন: C.2.3.1 <jee:jndi-lookup/>(সহজ)

উদাহরণ:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource"/>

আপনার এন্টারটিভারটি ডেটাসোর্সকে কী জন্মেছে জেএনডিআই নামটি আপনাকে খুঁজে বার করতে হবে। এটি সম্পূর্ণরূপে সার্ভার-নির্দিষ্ট, কীভাবে তা জানার জন্য আপনার সার্ভারে ডক্সের পরামর্শ নিন।

C.2.3 জী স্কিমাতেjee বর্ণিত হিসাবে আপনার মটরশুটি ফাইলটির শীর্ষে নেমস্পেসটি ঘোষণা করতে ভুলবেন না ।


8

আরেকটি বৈশিষ্ট্য: সার্ভার.এক্সএমএল পরিবর্তে, আপনি
আপনার_অ্যাপ্লিকেশন / মেটা-আইএনএফ / কনটেক্সট.এক্সএমএলে ( টমক্যাট ডক্স অনুসারে ) "রিসোর্স" ট্যাগ যুক্ত করতে পারেন :

<Context>
<Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource"
  username="dbUsername" password="dbPasswd"
  url="jdbc:postgresql://localhost/dbname"
  driverClassName="org.postgresql.Driver"
  initialSize="5" maxWait="5000"
  maxActive="120" maxIdle="5"
  validationQuery="select 1"
  poolPreparedStatements="true"/>
</Context>

5

মতে এ্যাপাচি হুল বিড়াল 7 JNDI ডেটাউত্স কীভাবে করবেন পৃষ্ঠা সেখানে web.xml মধ্যে একটি সম্পদ কনফিগারেশন হতে হবে:

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/TestDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>

সেটা আমার জন্য কাজ করে


4

আপনার বসন্তের ক্লাসে, আপনি এর মতো এনোটোটেড শিমটি ইনজেকশন করতে পারেন

@Autowired
@Qualifier("dbDataSource")
private DataSource dataSource;

এবং আপনি এটি আপনার প্রসঙ্গে প্রযোজ্য। xml

<beans:bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <beans:property name="jndiName" value="java:comp/env/jdbc/MyLocalDB"/>
</beans:bean>

আপনি টমক্যাটের সার্ভার.এক্সএমএল ব্যবহার করে জেএনডিআই সংস্থানটি ঘোষণা করতে পারেন

<Resource name="jdbc/TestDB" 
  global="jdbc/TestDB" 
  auth="Container" 
  type="javax.sql.DataSource" 
  driverClassName="com.mysql.jdbc.Driver" 
  url="jdbc:mysql://localhost:3306/TestDB" 
  username="pankaj" 
  password="pankaj123" 

  maxActive="100" 
  maxIdle="20" 
  minIdle="5" 
  maxWait="10000"/>

প্রসঙ্গ ফিরে যান। xml ডি বসন্ত এটি যোগ করুন

<ResourceLink name="jdbc/MyLocalDB"
                global="jdbc/TestDB"
                auth="Container"
                type="javax.sql.DataSource" />

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


1

সম্পূর্ণরূপে এক্সএমএল কনফিগারেশন অপসারণ করার জন্য আমি এই সমাধানটি একটি পরিষ্কার উপায়ে খুব সহায়ক বলে মনে করেছি।

দয়া করে জেএনডিআই এবং স্প্রিং ফ্রেমওয়ার্ক ব্যবহার করে এই ডিবি কনফিগারেশনটি পরীক্ষা করুন। http://www.unotions.com/design/how-to-create-oracleothersql-db-configuration-using-spring-and-maven/

এই নিবন্ধটি দ্বারা, এটি ডেটাবেস জেন্ডি (ডিবি / পরীক্ষা) কনফিগারেশনের উপর ভিত্তি করে ডিবি সংশ্লেষ তৈরি করা কত সহজ তা ব্যাখ্যা করে। একবার আপনি কনফিগারেশন সম্পন্ন করার পরে সমস্ত ডিবি সংগ্রহস্থলগুলি এই জেন্ডি ব্যবহার করে লোড করা হবে। আমি দরকারী খুঁজে পেয়েছি। @ পিয়ারের যদি এটি নিয়ে সমস্যা থাকে তবে আমাকে জানান। এটি ডিবি কনফিগারেশন লেখার সম্পূর্ণ সমাধান।


এই নিবন্ধটি দ্বারা, এটি ব্যাখ্যা করে যে কীভাবে ডাটাবেস জেন্ডি (ডিবি / পরীক্ষা) কনফিগারেশনের উপর ভিত্তি করে ডিবি কনগ্রেগ্রেশন তৈরি করা যায়। একবার আপনি কনফিগারেশন সম্পন্ন করার পরে সমস্ত ডিবি সংগ্রহস্থলগুলি এই জেন্ডি ব্যবহার করে লোড করা হবে। আমি দরকারী খুঁজে পেয়েছি। @ পিয়ারের যদি এটি নিয়ে সমস্যা থাকে তবে আমাকে জানান। এটি ডিবি কনফিগারেশন লেখার সম্পূর্ণ সমাধান।
ব্যবহারকারী 3892286

এই নিবন্ধটি দ্বারা, এটি ব্যাখ্যা করে যে কীভাবে ডাটাবেস জেন্ডি (ডিবি / পরীক্ষা) কনফিগারেশনের উপর ভিত্তি করে ডিবি কনগ্রেগ্রেশন তৈরি করা যায়। একবার আপনি কনফিগারেশন সম্পন্ন করার পরে সমস্ত ডিবি সংগ্রহস্থলগুলি এই জেন্ডি ব্যবহার করে লোড করা হবে। আমি দরকারী খুঁজে পেয়েছি। @ পিয়ারের যদি এটি নিয়ে সমস্যা থাকে তবে আমাকে জানান। এটি ডিবি কনফিগারেশন লেখার সম্পূর্ণ সমাধান।
সেরজিও এ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.