Я пытаюсь прочитать свойства ldap из файла ldap-TEST.properties и пытаюсь привязать его к классу конфигурации java. для этого я указал @PropertSource и определил статический объект Bean для свойства sourcesplaceholderconfigurer. все еще я получаю сообщение "Не удалось разрешить заполнитель" spring.profiles.active "в значении" путь к классам: / ldap - $ {spring.profiles.active} .properties ". Ниже приведены файлы проекта, пожалуйста, помогите мне
@Configuration
@PropertySource("classpath:/ldap-${spring.profiles.active}.properties")
public class LdapConfig {
@Autowired
Environment env;
@Bean
public LdapContextSource contextSource() {
LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl(env.getRequiredProperty("ldap.url"));
contextSource.setBase(env.getRequiredProperty("ldap.base"));
contextSource.setUserDn(env.getRequiredProperty("ldap.userDn"));
contextSource.setPassword(env.getRequiredProperty("ldap.password"));
contextSource.afterPropertiesSet();
return contextSource;
}
@Bean
public LdapTemplate ldapTemplate() {
return new LdapTemplate(contextSource());
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
//ldap-TEST.properties file
ldap.base=dc=example,dc=com
ldap.password=password
ldap.port=839
ldap.userDn=cn=read-only-admin,dc=example,dc=com
ldap.url=ldap://ldap.forumsys.com:389
мое основное приложение
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Проверьте ответ на вопрос: stackoverflow.com/questions/32196451/…
-Dspring.profiles.active = ТЕСТ при запуске приложения передать параметр
@OresteViron в application.properties я определил spring.profiles.active = TEST
@Abdul, как я могу пройти -Dspring.profiles.active = TEST Я развертываю свое приложение в jboss, я не запускаю из командной строки, не могли бы вы сказать мне, где я могу указать параметр
Попробуйте зарегистрировать значение $ {spring.profiles.active}. Я подозреваю, что существует более одного активного профиля. Таким образом, он не загружает правильный файл конфигурации.
@OresteViron Я попытался записать параметр, который показывает только ТЕСТ в качестве активного профиля. Я также попытался заменить spring.profiles.active на test.profile (я добавил один test.profile = TEST в файл application.properties). все еще вижу ту же ошибку
во время сборки я не вижу этой проблемы, я мог видеть только тогда, когда я запускаю код, он, вероятно, во время работы не может прочитать значение




Вы не можете использовать такие свойства, как ${spring.profiles.active}, внутри строкового значения аннотации Type в spring. такие свойства будут вставлены в аннотации, такие как @Value, которые предназначены для свойств или методов.
Значение, стоящее за spring.profiles.active, на самом деле является массивом. Таким образом, даже если значение было правильно развернуто, были бы крайние случаи, когда оно не сработало бы так, как вы хотите.
Было бы неплохо, если бы пути, настроенные через @PropertySource, работали так же, как application.properties|yml, но на данный момент это не так (об этом есть активная проблема на GitHub). Поэтому необходимо рассмотреть альтернативы:
application.properties|yml и application-{profile}.properties|yml. Я не вижу веских причин не делать этого, но я не знаю требований вашего проекта, так что ...я только что заменил $ {spring.profiles.active} $ {test.profile} и вызвал @PropertySource ("classpath: / ldap - $ {test.profile} .properties" ) defined test.prfoile = TEST все еще я получение той же ошибки
Это странно, как вы это описываете, должно работать. Хотя я не уверен, что ответ Махди верен (я не видел, чтобы в документации Spring говорилось, что ${spring.profiles.active} можно использовать, но он не говорит, что и не будет), использование другой переменной - хороший способ устранить этот потенциал. причина. Похоже, ваш application.properties даже не читается. Может быть, он просто не в нужном месте?
Я имею в виду, что если вы поместите аннотацию поверх класса, а не для его свойств или методов, вы не сможете использовать свойства внутри строк. Другая причина заключается в том, что вы определяете ресурсы свойств, поэтому первый шаг - это чтение ресурсов, второй шаг - размещение значений ресурсов внутри свойств, определенных в строке. Мой вопрос в том, как вы можете поместить значение внутри строки, если вы не указали ресурс свойств? Конечно, вы бы не смогли этого сделать ?
Значение таких переменных в Spring может поступать из множества источников, включая переменные среды или аргументы командной строки, которые Spring может прочитать сразу после запуска приложения. Действительно, хороший вопрос заключается в том, могут ли там использоваться переменные, помещенные в application.properties, и вы можете быть правы, что это не так. ? Но на самом деле я использовал стратегию, аналогичную прошлой задаче (переменная в @PropertySource), и она действительно работала, по крайней мере, со значением, предоставленным через аргумент командной строки или конфигурацию контекста Tomcat.
Вы проверили значение $ {spring.profiles.active}?