Ładuję atrybuty właściwości z .properties
pliku przy użyciu Spring w następujący sposób:
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
Plik źródłowy xml
file: myapplication.xml
<bean id="some"
class="com.some.Class">
<property name="property" value="#{base.module.elementToSearch}" />
</bean>
I moja Class.java
file: Class.java
public void setProperty(final List<Integer> elements){
this.elements = elements;
}
Ale podczas debugowania elementy parametrów otrzymują tylko ostatni element listy, więc istnieje lista zawierająca jeden element o wartości „6” zamiast listy zawierającej 6 elementów.
Próbowałem innych podejść, takich jak dodawanie tylko wartości, #{base.module}
ale wtedy nie znalazłem żadnego parametru w pliku właściwości.
Aby obejść ten problem, należy umieścić w pliku elements.properties listę oddzieloną przecinkami, na przykład:
base.module.elementToSearch=1,2,3,4,5,6
i użyj go jako ciągu i przeanalizuj go, ale czy jest lepsze rozwiązanie?
java
spring
placeholder
properties-file
RamonBoza
źródło
źródło
Odpowiedzi:
Jeśli zdefiniujesz tablicę w pliku właściwości, takim jak:
base.module.elementToSearch=1,2,3,4,5,6
Możesz załadować taką tablicę w swojej klasie Java w następujący sposób:
@Value("${base.module.elementToSearch}") private String[] elementToSearch;
źródło
List<String>
w ten sam sposób nie wydaje się działać (lista będzie miała tylko jeden element).String[]
jako typu działa tam, gdzieList<String>
nie działa.List<String>
zamiastString[]
, musisz dodać co najmniej a<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
do swojegoapplicationContext.xml
. W przeciwnym razie usługa konwersji nie jest używana, ale domyślne edytory właściwości, które nie obsługują konwersji ciągów znakówI dodaj inny separator inny niż przecinek, możesz go również użyć.
@Value("#{'${my.config.values}'.split(',')}") private String[] myValues; // could also be a List<String>
i
we właściwościach aplikacji, które możesz mieć
źródło
Oto przykład, jak możesz to zrobić na wiosnę 4.0+
application.properties
zadowolony:Kod Java:
@Autowire private Environment env; ... String[] springRocks = env.getProperty("some.key", String[].class);
źródło
Dzięki Spring Boot można wykonać następujące czynności:
application.properties
Klasa konfiguracji
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; } }
Jest to potrzebne, bez tej klasy lub bez
values
klasy w klasie nie działa.Spring Boot Application, klasa
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); } }
źródło
Jeśli chcesz przekazać symbol gwiazdki, musisz go umieścić w cudzysłowie.
W moim przypadku muszę skonfigurować cors dla websockets. Postanowiłem więc umieścić adresy URL cors w application.yml. W przypadku produktów env użyję określonych adresów URL, ale w przypadku deweloperów można użyć tylko *.
W pliku yml mam:
websocket: cors: "*"
W klasie Config mam:
@Value("${websocket.cors}") private String[] cors;
źródło