Saya memuat atribut properti dari .properties
file menggunakan Spring sebagai berikut:
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 pegas xml
file: myapplication.xml
<bean id="some"
class="com.some.Class">
<property name="property" value="#{base.module.elementToSearch}" />
</bean>
Dan Class.java saya
file: Class.java
public void setProperty(final List<Integer> elements){
this.elements = elements;
}
Namun saat debugging, elemen parameter hanya memasukkan elemen terakhir ke dalam daftar, jadi, ada daftar satu elemen dengan nilai "6", bukan daftar dengan 6 elemen.
Saya mencoba pendekatan lain, seperti menambahkan nilai saja #{base.module}
tetapi kemudian tidak menemukan parameter di file properti.
Solusinya adalah memiliki dalam file elements.properties daftar yang dipisahkan dengan koma, seperti:
base.module.elementToSearch=1,2,3,4,5,6
dan menggunakannya sebagai String dan menguraikannya, tetapi apakah ada solusi yang lebih baik?
java
spring
placeholder
properties-file
RamonBoza
sumber
sumber
Jawaban:
Jika Anda mendefinisikan array Anda dalam file properti seperti:
base.module.elementToSearch=1,2,3,4,5,6
Anda dapat memuat array seperti itu di kelas Java Anda seperti ini:
@Value("${base.module.elementToSearch}") private String[] elementToSearch;
sumber
List<String>
dengan cara yang sama tampaknya tidak berhasil (daftar hanya akan memiliki satu elemen).String[]
sebagai tipe berfungsi, di mana penggunaanList<String>
tidak berfungsi.List<String>
bukan denganString[]
, Anda perlu menambahkan setidaknya a<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
ke fileapplicationContext.xml
. Jika tidak, layanan konversi tidak digunakan tetapi editor properti default, yang tidak mendukung konversi Strings menjadi koleksi, hanya array: docs.spring.io/spring/docs/current/spring-framework-reference/…Dan jika Anda memiliki pembatas yang berbeda selain koma, Anda juga dapat menggunakannya.
@Value("#{'${my.config.values}'.split(',')}") private String[] myValues; // could also be a List<String>
dan
di properti aplikasi Anda, Anda dapat memiliki
sumber
Berikut adalah contoh bagaimana Anda dapat melakukannya di Spring 4.0+
application.properties
kandungan:Kode Java:
@Autowire private Environment env; ... String[] springRocks = env.getProperty("some.key", String[].class);
sumber
Dengan Spring Boot seseorang dapat melakukan hal berikut:
application.properties
Kelas konfigurasi
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; } }
Ini diperlukan, tanpa kelas ini atau tanpa
values
kelas dalam itu tidak akan berfungsi.Kelas Aplikasi Spring Boot
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); } }
sumber
Jika Anda ingin melewatkan simbol asterisk, Anda harus membungkusnya dengan tanda kutip.
Dalam kasus saya, saya perlu mengkonfigurasi cors untuk websockets. Jadi, saya memutuskan untuk memasukkan url cors ke application.yml. Untuk prod env saya akan menggunakan url khusus, tetapi untuk dev tidak masalah menggunakan *.
Dalam file yml saya punya:
websocket: cors: "*"
Di kelas Config saya memiliki:
@Value("${websocket.cors}") private String[] cors;
sumber