private PropertyResolver getAnsiResolver() { MutablePropertySources sources = new MutablePropertySources(); sources.addFirst(new AnsiPropertySource("ansi", true)); return new PropertySourcesPropertyResolver(sources); }
@Override @Nullable public String getProperty(String key) { return getProperty(key, String.class, true); }
@Test(expected = IllegalArgumentException.class) public void resolveRequiredPlaceholders_withNullInput() { new PropertySourcesPropertyResolver(new MutablePropertySources()).resolveRequiredPlaceholders(null); }
private PropertyResolver getPatternsResolver(Environment environment) { if (environment == null) { return new PropertySourcesPropertyResolver(null); } if (environment instanceof ConfigurableEnvironment) { PropertySourcesPropertyResolver resolver = new PropertySourcesPropertyResolver( ((ConfigurableEnvironment) environment).getPropertySources()); resolver.setIgnoreUnresolvableNestedPlaceholders(true); return resolver; } return environment; }
@Nullable protected <T> T getProperty(String key, Class<T> targetValueType, boolean resolveNestedPlaceholders) { if (this.propertySources != null) { for (PropertySource<?> propertySource : this.propertySources) { if (logger.isTraceEnabled()) { logger.trace("Searching for key '" + key + "' in PropertySource '" + propertySource.getName() + "'"); } Object value = propertySource.getProperty(key); if (value != null) { if (resolveNestedPlaceholders && value instanceof String) { value = resolveNestedPlaceholders((String) value); } logKeyFound(key, propertySource, value); return convertValueIfNecessary(value, targetValueType); } } } if (logger.isTraceEnabled()) { logger.trace("Could not find key '" + key + "' in any property source"); } return null; }
protected void processProperties(ConfigurableListableBeanFactory beanFactory, PropertySources propertySources) throws BeansException { log.info("Apply properties."); final PropertySourcesPropertyResolver propertyResolver = new PropertySourcesPropertyResolver(propertySources); propertyResolver.setPlaceholderPrefix(this.placeholderPrefix); propertyResolver.setPlaceholderSuffix(this.placeholderSuffix); propertyResolver.setValueSeparator(this.valueSeparator); StringValueResolver valueResolver = new StringValueResolver() { @Override public String resolveStringValue(String strVal) { String resolved = ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal); return (resolved.equals(nullValue) ? null : resolved); } }; doProcessProperties(beanFactory, valueResolver); } }
@Test(expected = IllegalArgumentException.class) public void resolvePlaceholders_withNullInput() { new PropertySourcesPropertyResolver(new MutablePropertySources()).resolvePlaceholders(null); }
@Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { ConfigurableListableBeanFactory beanFactory = (ConfigurableListableBeanFactory) registry; PropertySourcesPlaceholderConfigurer configurer = configPropertySourcesPlaceholderConfigurer(beanFactory); String[] propertiesAwares = beanFactory.getBeanNamesForType(PropertiesAware.class); Arrays.asList(propertiesAwares).forEach(propertiesAwareName -> beanFactory.getBean(propertiesAwareName, PropertiesAware.class).setProperties(localenv)); mergeProperties(configurer); PropertySourcesPropertyResolver propertyResolver = new PropertySourcesPropertyResolver(localenv.getPropertySources()); boolean trimValues = false; boolean ignoreUnresolvablePlaceholders = false; beanFactory.addEmbeddedValueResolver((strVal -> { String resolved = (ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal)); if (trimValues) { resolved = resolved.trim(); } return (resolved.equals(null) ? null : resolved); })); }
@Override public String resolveStringValue(String strVal) { String resolved = ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal); return (resolved.equals(nullValue) ? null : resolved); } };
public <T> T resolve(String variableName, Class<T> clazz) { if (!resolver.containsProperty(variableName)) { throw new UnknownVariableException(variableName); } return resolver.getProperty(variableName, clazz); }
Class<?> valueType = value.getClass(); if (String.class.equals(valueType)) { value = this.resolveRequiredPlaceholders((String) value);
private PropertyResolver getPropertyResolver() { if (this.environment instanceof ConfigurableEnvironment) { PropertyResolver resolver = new PropertySourcesPropertyResolver( ((ConfigurableEnvironment) this.environment).getPropertySources()); ((PropertySourcesPropertyResolver) resolver) .setIgnoreUnresolvableNestedPlaceholders(true); return resolver; } return this.environment; }
protected void processProperties(ConfigurableListableBeanFactory beanFactory, PropertySources propertySources) throws BeansException { log.info("Apply properties."); final PropertySourcesPropertyResolver propertyResolver = new PropertySourcesPropertyResolver(propertySources); propertyResolver.setPlaceholderPrefix(this.placeholderPrefix); propertyResolver.setPlaceholderSuffix(this.placeholderSuffix); propertyResolver.setValueSeparator(this.valueSeparator); StringValueResolver valueResolver = new StringValueResolver() { @Override public String resolveStringValue(String strVal) { String resolved = ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal); return (resolved.equals(nullValue) ? null : resolved); } }; doProcessProperties(beanFactory, valueResolver); } }
@Nullable protected <T> T getProperty(String key, Class<T> targetValueType, boolean resolveNestedPlaceholders) { if (this.propertySources != null) { for (PropertySource<?> propertySource : this.propertySources) { if (logger.isTraceEnabled()) { logger.trace("Searching for key '" + key + "' in PropertySource '" + propertySource.getName() + "'"); } Object value = propertySource.getProperty(key); if (value != null) { if (resolveNestedPlaceholders && value instanceof String) { value = resolveNestedPlaceholders((String) value); } logKeyFound(key, propertySource, value); return convertValueIfNecessary(value, targetValueType); } } } if (logger.isTraceEnabled()) { logger.trace("Could not find key '" + key + "' in any property source"); } return null; }
@Override public String resolveStringValue(String strVal) { String resolved = ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal); return (resolved.equals(nullValue) ? null : resolved); } };
private PropertyResolver getTitleResolver(Class<?> sourceClass) { MutablePropertySources sources = new MutablePropertySources(); String applicationTitle = getApplicationTitle(sourceClass); Map<String, Object> titleMap = Collections.singletonMap("application.title", (applicationTitle != null) ? applicationTitle : ""); sources.addFirst(new MapPropertySource("title", titleMap)); return new PropertySourcesPropertyResolver(sources); }
/** * Return a property resolver for the environment, preferring one that ignores * unresolvable nested placeholders. * @param environment the source environment * @param prefix the prefix * @return a property resolver for the environment * @since 1.4.3 */ public static RelaxedPropertyResolver ignoringUnresolvableNestedPlaceholders( Environment environment, String prefix) { Assert.notNull(environment, "Environment must not be null"); PropertyResolver resolver = environment; if (environment instanceof ConfigurableEnvironment) { resolver = new PropertySourcesPropertyResolver( ((ConfigurableEnvironment) environment).getPropertySources()); ((PropertySourcesPropertyResolver) resolver) .setIgnoreUnresolvableNestedPlaceholders(true); } return new RelaxedPropertyResolver(resolver, prefix); } }
@Override @Nullable protected String getPropertyAsRawString(String key) { return getProperty(key, String.class, false); }
@Nullable protected <T> T getProperty(String key, Class<T> targetValueType, boolean resolveNestedPlaceholders) { if (this.propertySources != null) { for (PropertySource<?> propertySource : this.propertySources) { if (logger.isTraceEnabled()) { logger.trace("Searching for key '" + key + "' in PropertySource '" + propertySource.getName() + "'"); } Object value = propertySource.getProperty(key); if (value != null) { if (resolveNestedPlaceholders && value instanceof String) { value = resolveNestedPlaceholders((String) value); } logKeyFound(key, propertySource, value); return convertValueIfNecessary(value, targetValueType); } } } if (logger.isTraceEnabled()) { logger.trace("Could not find key '" + key + "' in any property source"); } return null; }
@Before public void setUp() { propertySources = new MutablePropertySources(); propertyResolver = new PropertySourcesPropertyResolver(propertySources); testProperties = new Properties(); propertySources.addFirst(new PropertiesPropertySource("testProperties", testProperties)); }