Mój kontroler ma
@Value("${myProp}")
private String myProp;
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
@RequestMapping(value = "myProp", method = RequestMethod.GET)
public @ResponseBody String getMyProp(){
return "The prop is:" + myProp;
}
mój applicationcontext.xml
ma
<bean id="appConfigProperties" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="location" value="classpath:MyApps-local.properties" />
</bean>
Otrzymuję następujący wyjątek:
Przyczyna: java.lang.IllegalArgumentException: Nie można rozwiązać symbol zastępczy „myProp” w wartości ciągu „$ {myProp}”
Uwaga: Mój plik właściwości MyApps-local.properties
jest w classpath
i zawiera
myProp=delightful
każda pomoc byłaby świetna ....
Odpowiedzi:
2 dla odpowiedzi № 1W konfiguracji opartej na XML musisz użyć PropertyPlaceholderConfigurer
fasola
<beans xmlns="http://www.springframework.org/schema/beans" . . . >
. . .
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties" />
</bean>
. . .
</beans>
ale możesz użyć wartości z database.properties
tylko w konfiguracji xml
<beans xmlns="http://www.springframework.org/schema/beans" . . >
. . .
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
. . .
</beans>
Jeśli chcesz użyć wartości z plików właściwości w środku @Value
adnotację do pól fasoli, musisz dodać @Confuguration
i @PropertySource
adnotacja do klasy fasoli. Lubię to
@Configuration
@PropertySource("classpath:database.properties")
public class AppConfig {
@Value("${jdbc.url}")
private String url;
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
}
1 dla odpowiedzi nr 2
W twojej konfiguracji masz dwaPropertySourcesPlaceholderConfigurer. Pierwszy zdefiniowany w DispatcherServlet przy użyciu Java @Configuration używa standardowego środowiska do wyszukiwania właściwości. Oznacza to właściwości środowiska systemowego i zmiennych środowiskowych, a także zdefiniowane @PropertySource.
To nie jest świadome twojego lokalnego MyApps.plik właściwości określony w pliku applicationContext.xml. Drugi obiekt PropertySourcesPlaceholderConfigurer w pliku xml rozpoznaje plik MyApps-local.properties, ale wysyła jedynie symbol zastępczy procesu w kontekście aplikacji root
Fabryczne procesory post bean mają zakres zależny od kontekstu aplikacji.
Zmień kontekst aplikacji internetowej, aby określić źródło właściwości. Spowoduje to dodanie właściwości do pliku do środowiska
@Configuration
@PropertySource("classpath:MyApps-local.properties")
public class WebConfig{
@Autowired
private Environment env;
@RequestMapping(value = "myProp", method = RequestMethod.GET)
public @ResponseBody String getMyProp(){
return "The prop is:" + env.getProperty("myProp");
}
}
W takim przypadku nie potrzebujesz PropertySourcesPlacheholder, ponieważ możesz wyszukiwać właściwości w środowisku. Następnie zachowaj plik applicationContext.xml w niezmienionej postaci
Będzie także działał z PropertySourcesPlaceholder @Bean, ponieważ pobiera również właściwości z otoczenia. Jednak abover jest czysty niż poniżej
@Configuration
@PropertySource("classpath:MyApps-local.properties")
public class WebConfig{
@Value("${myProp}")
private String myProp;
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
@RequestMapping(value = "myProp", method = RequestMethod.GET)
public @ResponseBody String getMyProp(){
return "The prop is:" + myProp;
}
}
0 dla odpowiedzi № 3
Sprawdź, czy to pomaga
- Możesz dalej używać tego tagu util w konfiguracji xml
<util:properties id="appConfigProperties" location="location to your properties file" /> <context:property-placeholder properties-ref="appConfigProperties" />
Pochodzi ze schematu http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
Następnie w kodzie, w którym chcesz wartość z pliku właściwości, użyj go jako
@Value („$ {myPropl}”)
prywatny ciąg str;
działa dla mnie, daj mi znać, jeśli gdzieś utknąłem :)
-1 dla odpowiedzi № 4
Przeczytaj uważnie to http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files
W trybie deweloperskim użyj właściwości specyficznych dla profilu