Не удалось разрешить заполнитель "spring.profiles.active" в значении "classpath: / ldap - $ {spring.profiles.active} .properties"

Я пытаюсь прочитать свойства 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);
 }

}

Вы проверили значение $ {spring.profiles.active}?

Oreste Viron 21.08.2018 09:30

Проверьте ответ на вопрос: stackoverflow.com/questions/32196451/…

MystyxMac 21.08.2018 09:31

-Dspring.profiles.active = ТЕСТ при запуске приложения передать параметр

Abdul 21.08.2018 09:47

@OresteViron в application.properties я определил spring.profiles.active = TEST

user2307155 21.08.2018 11:14

@Abdul, как я могу пройти -Dspring.profiles.active = TEST Я развертываю свое приложение в jboss, я не запускаю из командной строки, не могли бы вы сказать мне, где я могу указать параметр

user2307155 21.08.2018 11:16

Попробуйте зарегистрировать значение $ {spring.profiles.active}. Я подозреваю, что существует более одного активного профиля. Таким образом, он не загружает правильный файл конфигурации.

Oreste Viron 21.08.2018 11:18

@OresteViron Я попытался записать параметр, который показывает только ТЕСТ в качестве активного профиля. Я также попытался заменить spring.profiles.active на test.profile (я добавил один test.profile = TEST в файл application.properties). все еще вижу ту же ошибку

user2307155 21.08.2018 11:45

во время сборки я не вижу этой проблемы, я мог видеть только тогда, когда я запускаю код, он, вероятно, во время работы не может прочитать значение

user2307155 21.08.2018 13:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
8
12 664
2

Ответы 2

Вы не можете использовать такие свойства, как ${spring.profiles.active}, внутри строкового значения аннотации Type в spring. такие свойства будут вставлены в аннотации, такие как @Value, которые предназначены для свойств или методов.

Значение, стоящее за spring.profiles.active, на самом деле является массивом. Таким образом, даже если значение было правильно развернуто, были бы крайние случаи, когда оно не сработало бы так, как вы хотите.

Было бы неплохо, если бы пути, настроенные через @PropertySource, работали так же, как application.properties|yml, но на данный момент это не так (об этом есть активная проблема на GitHub). Поэтому необходимо рассмотреть альтернативы:

  1. Простейшей альтернативой было бы использование обычных имен файлов application.properties|yml и application-{profile}.properties|yml. Я не вижу веских причин не делать этого, но я не знаю требований вашего проекта, так что ...
  2. Немного сложнее, получить настроенные профили с помощью кода Java и программно настроить среду Spring. См. Этот SO-ответ для получения более подробной информации..

я только что заменил $ {spring.profiles.active} $ {test.profile} и вызвал @PropertySource ("classpath: / ldap - $ {test.profile} .properties" ‌) defined test.prfoile = TEST все еще я получение той же ошибки

user2307155 21.08.2018 11:12

Это странно, как вы это описываете, должно работать. Хотя я не уверен, что ответ Махди верен (я не видел, чтобы в документации Spring говорилось, что ${spring.profiles.active} можно использовать, но он не говорит, что и не будет), использование другой переменной - хороший способ устранить этот потенциал. причина. Похоже, ваш application.properties даже не читается. Может быть, он просто не в нужном месте?

KevinLH 21.08.2018 16:49

Я имею в виду, что если вы поместите аннотацию поверх класса, а не для его свойств или методов, вы не сможете использовать свойства внутри строк. Другая причина заключается в том, что вы определяете ресурсы свойств, поэтому первый шаг - это чтение ресурсов, второй шаг - размещение значений ресурсов внутри свойств, определенных в строке. Мой вопрос в том, как вы можете поместить значение внутри строки, если вы не указали ресурс свойств? Конечно, вы бы не смогли этого сделать ?

Mahdi Rajabi 21.08.2018 22:08

Значение таких переменных в Spring может поступать из множества источников, включая переменные среды или аргументы командной строки, которые Spring может прочитать сразу после запуска приложения. Действительно, хороший вопрос заключается в том, могут ли там использоваться переменные, помещенные в application.properties, и вы можете быть правы, что это не так. ? Но на самом деле я использовал стратегию, аналогичную прошлой задаче (переменная в @PropertySource), и она действительно работала, по крайней мере, со значением, предоставленным через аргумент командной строки или конфигурацию контекста Tomcat.

KevinLH 22.08.2018 10:35

Другие вопросы по теме