Я работаю над новым веб-приложением 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
. Любые предложения о том, что я делаю неправильно
@ M.Deinum Вау, хороший звонок. Не стесняйтесь добавить это в качестве ответа. Как ты это понял? Или вы видели это раньше?
Подобные ошибки обычно возникают в результате смешивания банок разных версий. Т.е. процессор аннотаций ожидает, что в аннотации будет что-то, чего нет.
Подобные ошибки обычно являются признаком смешивания jar-файлов из разных версий Spring. В этом случае процессор аннотации для аннотации @PropertySource
ожидает, что свойство encoding
будет там.
Однако во время выполнения этого нет и, следовательно, возникает ошибка.
Вы хотите проверить свои (транзитивные) зависимости на наличие конфликтующих версий (или версий, которыми вы не управляли явно).
Дэйв, запустите 'mvn dependency: tree', чтобы увидеть конфликт, если вы используете maven
Я использую gradle
и, непреднамеренно используя зависимость compile
вместо compileOnly
, в итоге получил файлы Spring jar
как в моем файле war
, так и в каталоге Tomcat lib
, что привело к моей проблеме.
Похоже на баночки для смешивания из разных версий Spring.