Почему моя аннотация Spring PropertySource не работает с атрибутом кодирования?

Я работаю над новым веб-приложением Spring и следую шаблону, который хорошо работал с более ранними веб-приложениями. У меня есть класс конфигурации веб-приложения:

@Configuration
@EnableWebMvc
@EnableJpaRepositories
@EnableTransactionManagement
@ComponentScan(basePackages = {"com.example" })
@PropertySource(value = "classpath:application.properties")
public class WebApplicationConfiguration extends WebMvcConfigurerAdapter { ... }

Когда я запускаю веб-приложение (в Tomcat), я получаю следующую ошибку:

[RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
[RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class 
[org.springframework.web.context.ContextLoaderListener] org.springframework.beans.factory.BeanDefinitionStoreException:
    Failed to parse configuration class [com.example.WebApplicationConfiguration];
    nested exception is java.lang.IllegalArgumentException:
    Attribute 'encoding' not found in attributes for annotation [org.springframework.context.annotation.PropertySource]
    at org.springframework.context.annotation.ConfigurationClassParser.parse (ConfigurationClassParser.java:187)
...
Caused by: java.lang.IllegalArgumentException:
    Attribute 'encoding' not found in attributes for annotation
    [org.springframework.context.annotation.PropertySource]

Мне не нужно было указывать атрибут encoding в аннотации @PropertySource в более ранних веб-приложениях, поэтому я не уверен, почему сейчас появляется ошибка. Во всяком случае, я пробовал следующее:

@PropertySource(value = "classpath:application.properties", encoding = "UTF-8")

... и это не имело значения, т.е. У меня такая же ошибка. Это наводит на мысль, что основная причина может быть не в аннотации @PropertySource. Любые предложения о том, что я делаю неправильно

Похоже на баночки для смешивания из разных версий Spring.

M. Deinum 26.10.2018 16:10

@ M.Deinum Вау, хороший звонок. Не стесняйтесь добавить это в качестве ответа. Как ты это понял? Или вы видели это раньше?

dave 27.10.2018 02:43

Подобные ошибки обычно возникают в результате смешивания банок разных версий. Т.е. процессор аннотаций ожидает, что в аннотации будет что-то, чего нет.

M. Deinum 28.10.2018 11:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
368
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подобные ошибки обычно являются признаком смешивания jar-файлов из разных версий Spring. В этом случае процессор аннотации для аннотации @PropertySource ожидает, что свойство encoding будет там.

Однако во время выполнения этого нет и, следовательно, возникает ошибка.

Вы хотите проверить свои (транзитивные) зависимости на наличие конфликтующих версий (или версий, которыми вы не управляли явно).

Дэйв, запустите 'mvn dependency: tree', чтобы увидеть конфликт, если вы используете maven

dimirsen 28.10.2018 17:07

Я использую gradle и, непреднамеренно используя зависимость compile вместо compileOnly, в итоге получил файлы Spring jar как в моем файле war, так и в каталоге Tomcat lib, что привело к моей проблеме.

dave 28.10.2018 21:53

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