স্প্রিং। প্রপার্টি ফাইল: অ্যারের হিসাবে উপাদান পান


94

আমি .propertiesস্প্রিং ব্যবহার করে কোনও ফাইল থেকে সম্পত্তি বৈশিষ্ট্যগুলি লোড করছি :

file: elements.properties
base.module.elementToSearch=1
base.module.elementToSearch=2
base.module.elementToSearch=3
base.module.elementToSearch=4
base.module.elementToSearch=5
base.module.elementToSearch=6

বসন্তের এক্সএমএল ফাইল

file: myapplication.xml
<bean id="some"
      class="com.some.Class">
      <property name="property" value="#{base.module.elementToSearch}" />
</bean>

এবং আমার Class.java

file: Class.java
public void setProperty(final List<Integer> elements){
    this.elements = elements;
}

কিন্তু ডিবাগ করার সময়, প্যারামিটার উপাদানগুলি কেবলমাত্র তালিকার শেষ উপাদানটি পায়, সুতরাং, 6 উপাদানগুলির একটি তালিকার পরিবর্তে "6" মানযুক্ত একটি উপাদানের একটি তালিকা রয়েছে।

আমি অন্যান্য পদ্ধতির চেষ্টা করেছি, যেমন কেবলমাত্র মূল্য যুক্ত করার #{base.module}পরে তবে এটি বৈশিষ্ট্য ফাইলে কোনও পরামিতি খুঁজে পায় না।

কার্যতালিকা থাকা উচিত উপাদানগুলি elements ব্যক্তিগতভাবে কমা দ্বারা পৃথক করা একটি তালিকা ফাইল করে, যেমন:

base.module.elementToSearch=1,2,3,4,5,6

এবং এটি একটি স্ট্রিং হিসাবে ব্যবহার করুন এবং এটি বিশ্লেষণ করুন, তবে এর থেকে আরও ভাল সমাধান কি আছে?



সুতরাং আমাকে এটিকে কমা দ্বারা পৃথক করা স্ট্রিং হিসাবে এবং পদ্ধতিতে পার্স করা দরকার।
রামনবোজ

ঠিক যেমন, যদিও আপনার জন্য এটি কিছু লিবস ইতিমধ্যে করছে ( অ্যাপাচি
কলিন হেবার্ট

এখানে একটি উত্তর যা কমপক্ষে আপনাকে একটি সেট <স্ট্রিং> ফলাফল দেয়। বেশিরভাগ তালিকার <স্ট্রিং> নয়, তবে বেশিরভাগ ক্ষেত্রেই যথেষ্ট! stackoverflow.com/questions/5274362/…
জন রিক্স

উত্তর:


194

আপনি যদি সম্পত্তি অ্যারে আপনার অ্যারের সংজ্ঞা দেন তবে:

base.module.elementToSearch=1,2,3,4,5,6

আপনি আপনার জাভা ক্লাসে এ জাতীয় অ্যারে লোড করতে পারেন:

  @Value("${base.module.elementToSearch}")
  private String[] elementToSearch;

4
আমার উপাদানগুলিতে কমা রয়েছে। আমি কীভাবে বিচ্ছেদকারীকে পালাতে পারি? '\,' এমনকি '\\,' কাজ করে না।
banterCZ

আপনি তাদের পূর্ণসংখ্যার তালিকার তালিকা হিসাবে পাওয়ার চেষ্টা করতে পারেন এবং তারপরে তাদের @ ভ্যালুতে ("$ {base.module.elementToSearch}") ব্যক্তিগত তালিকাগুলি <Inger >> এলিটামোটো অনুসন্ধান;
গাল ব্রাচা

+1, ঠিক আমার যা প্রয়োজন। দুর্ভাগ্যক্রমে List<String>একই ফ্যাশনে কমা-বিচ্ছিন্ন মানগুলি পড়াতে কাজ করার মতো মনে হয় না (তালিকায় কেবলমাত্র একটি উপাদান থাকবে)।
জোনিক

4
আমি নিশ্চিত করতে পারি যে String[]টাইপ হিসাবে ব্যবহার করা কাজ করে, যেখানে ব্যবহার List<String>কাজ করে না।
উইম দেবলাউয়ে

4
আপনি যদি এর List<String>পরিবর্তে এটির সাথে কাজ করতে চান String[]তবে <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">আপনার কমপক্ষে একটি যুক্ত করতে হবে applicationContext.xml। অন্যথায় রূপান্তর পরিষেবা ব্যবহৃত হয় না তবে ডিফল্ট সম্পত্তি সম্পাদকরা স্ট্রিংগুলিকে সংগ্রহগুলিতে রূপান্তরিত করে না, কেবল অ্যারে: ডকস.স্প্রিং.আইও
ক্লিন-রববেনহার

37

এবং আপনাকে কমা ব্যতীত অন্য একটি ডিলিমিটার উত্সাহিত করে, আপনি এটিও ব্যবহার করতে পারেন।

@Value("#{'${my.config.values}'.split(',')}")
private String[] myValues;   // could also be a List<String>

এবং

আপনার অ্যাপ্লিকেশন বৈশিষ্ট্যে আপনি থাকতে পারে

my.config.values=value1, value2, value3

এই ব্যবহারটি অন্যান্য টীকাগুলির সাথেও কাজ করে, আমি @ কাফকালিস্টনার {বিষয়গুলি = "# {'$ {অ্যারেপ্রপার্টি}' split স্প্লিট (',')}"} বসন্ত
কাফকা

32

আপনি কীভাবে এটি বসন্ত 4.0+ এ করতে পারেন তার একটি উদাহরণ এখানে

application.properties বিষয়বস্তু:

some.key=yes,no,cancel

জাভা কোড:

@Autowire
private Environment env;

...

String[] springRocks = env.getProperty("some.key", String[].class);

এই আমি কি চাই, কিন্তু env মধ্যে Vars ... আমি SOME_KEY_0_ ব্যবহার করতে সক্ষম হওয়া উচিত = হ্যাঁ SOME_KEY_1 = না, ইত্যাদি env Vars, কিন্তু আমার getProperty ফিরে নাল আসছে
Rhubarb

1

একটি স্প্রিং বুট দিয়ে নিম্নলিখিতগুলি করতে পারেন:

application.properties

values[0]=abc
values[1]=def

কনফিগারেশন ক্লাস

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
@ConfigurationProperties
public class Configuration {

    List<String> values = new ArrayList<>();

    public List<String> getValues() {
        return values;
    }

}

এটি প্রয়োজন, এই ক্লাস ছাড়াই বা ক্লাস ছাড়াই এটি valuesকাজ করছে না।

স্প্রিং বুট অ্যাপ্লিকেশন ক্লাস

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.List;

@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {

    private static Logger LOG = LoggerFactory.getLogger(SpringBootConsoleApplication.class);

    // notice #{} is used instead of ${}
    @Value("#{configuration.values}")
    List<String> values;

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

    @Override
    public void run(String... args) {
        LOG.info("values: {}", values);
    }

}

0

যদি আপনাকে অষ্টমী চিহ্নটি পাস করতে হয় তবে আপনাকে এটিকে উদ্ধৃতি দিয়ে মোড়ানো করতে হবে।

আমার ক্ষেত্রে, আমাকে ওয়েবসকেটের জন্য করগুলি কনফিগার করতে হবে। সুতরাং, আমি আবেদন করেছি। Url- এ কর্স ইউআরএল রাখব। প্রোড এনভির জন্য আমি নির্দিষ্ট ইউআরএল ব্যবহার করব, তবে দেবের জন্য ঠিক * ব্যবহার করা ঠিক হবে।

YML ফাইলে আমার কাছে রয়েছে:

websocket:
  cors: "*"

কনফিগার ক্লাসে আমার রয়েছে:

@Value("${websocket.cors}")
private String[] cors;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.