@ -21,9 +21,14 @@ import java.util.Properties;
@@ -21,9 +21,14 @@ import java.util.Properties;
import org.junit.jupiter.api.Test ;
import org.springframework.beans.factory.BeanCreationException ;
import org.springframework.beans.factory.BeanDefinitionStoreException ;
import org.springframework.beans.factory.annotation.Value ;
import org.springframework.beans.factory.support.DefaultListableBeanFactory ;
import org.springframework.beans.testfixture.beans.TestBean ;
import org.springframework.context.annotation.AnnotationConfigApplicationContext ;
import org.springframework.context.annotation.Bean ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.core.convert.support.DefaultConversionService ;
import org.springframework.core.env.MutablePropertySources ;
import org.springframework.core.env.PropertySource ;
@ -40,8 +45,11 @@ import static org.springframework.beans.factory.support.BeanDefinitionBuilder.ge
@@ -40,8 +45,11 @@ import static org.springframework.beans.factory.support.BeanDefinitionBuilder.ge
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition ;
/ * *
* Tests for { @link PropertySourcesPlaceholderConfigurer } .
*
* @author Chris Beams
* @author Juergen Hoeller
* @author Sam Brannen
* @since 3 . 1
* /
public class PropertySourcesPlaceholderConfigurerTests {
@ -159,8 +167,11 @@ public class PropertySourcesPlaceholderConfigurerTests {
@@ -159,8 +167,11 @@ public class PropertySourcesPlaceholderConfigurerTests {
PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer ( ) ;
//pc.setIgnoreUnresolvablePlaceholders(false); // the default
assertThatExceptionOfType ( BeanDefinitionStoreException . class ) . isThrownBy ( ( ) - >
ppc . postProcessBeanFactory ( bf ) ) ;
assertThatExceptionOfType ( BeanDefinitionStoreException . class )
. isThrownBy ( ( ) - > ppc . postProcessBeanFactory ( bf ) )
. havingCause ( )
. isExactlyInstanceOf ( IllegalArgumentException . class )
. withMessage ( "Could not resolve placeholder 'my.name' in value \"${my.name}\"" ) ;
}
@Test
@ -177,6 +188,38 @@ public class PropertySourcesPlaceholderConfigurerTests {
@@ -177,6 +188,38 @@ public class PropertySourcesPlaceholderConfigurerTests {
assertThat ( bf . getBean ( TestBean . class ) . getName ( ) ) . isEqualTo ( "${my.name}" ) ;
}
@Test
// https://github.com/spring-projects/spring-framework/issues/27947
public void ignoreUnresolvablePlaceholdersInAtValueAnnotation__falseIsDefault ( ) {
MockPropertySource mockPropertySource = new MockPropertySource ( "test" ) ;
mockPropertySource . setProperty ( "my.key" , "${enigma}" ) ;
@SuppressWarnings ( "resource" )
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( ) ;
context . getEnvironment ( ) . getPropertySources ( ) . addLast ( mockPropertySource ) ;
context . register ( IgnoreUnresolvablePlaceholdersFalseConfig . class ) ;
assertThatExceptionOfType ( BeanCreationException . class )
. isThrownBy ( context : : refresh )
. havingCause ( )
. isExactlyInstanceOf ( IllegalArgumentException . class )
. withMessage ( "Could not resolve placeholder 'enigma' in value \"${enigma}\"" ) ;
}
@Test
// https://github.com/spring-projects/spring-framework/issues/27947
public void ignoreUnresolvablePlaceholdersInAtValueAnnotation_true ( ) {
MockPropertySource mockPropertySource = new MockPropertySource ( "test" ) ;
mockPropertySource . setProperty ( "my.key" , "${enigma}" ) ;
@SuppressWarnings ( "resource" )
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( ) ;
context . getEnvironment ( ) . getPropertySources ( ) . addLast ( mockPropertySource ) ;
context . register ( IgnoreUnresolvablePlaceholdersTrueConfig . class ) ;
context . refresh ( ) ;
IgnoreUnresolvablePlaceholdersTrueConfig config = context . getBean ( IgnoreUnresolvablePlaceholdersTrueConfig . class ) ;
assertThat ( config . value ) . isEqualTo ( "${enigma}" ) ;
}
@Test
@SuppressWarnings ( "serial" )
public void nestedUnresolvablePlaceholder ( ) {
@ -402,4 +445,30 @@ public class PropertySourcesPlaceholderConfigurerTests {
@@ -402,4 +445,30 @@ public class PropertySourcesPlaceholderConfigurerTests {
}
}
@Configuration
static class IgnoreUnresolvablePlaceholdersFalseConfig {
@Value ( "${my.key}" )
String value ;
@Bean
static PropertySourcesPlaceholderConfigurer pspc ( ) {
return new PropertySourcesPlaceholderConfigurer ( ) ;
}
}
@Configuration
static class IgnoreUnresolvablePlaceholdersTrueConfig {
@Value ( "${my.key}" )
String value ;
@Bean
static PropertySourcesPlaceholderConfigurer pspc ( ) {
PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer ( ) ;
pspc . setIgnoreUnresolvablePlaceholders ( true ) ;
return pspc ;
}
}
}